当前位置: 首页 > news >正文

网站开发流程图 最木工支模价格明细表

网站开发流程图 最,木工支模价格明细表,模版 网站需要多少钱,甘肃省seo关键词优化一 什么是Spring Cloud Gateway 网关作为流量的入口#xff0c;常用的功能包括路由转发#xff0c;权限校验#xff0c;限流等。 Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架#xff0c;定位于取代 Netflix Zuul。相比 Zuul 来说#xff0c;Spring Clo…一 什么是Spring Cloud Gateway 网关作为流量的入口常用的功能包括路由转发权限校验限流等。 Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架定位于取代 Netflix Zuul。相比 Zuul 来说Spring Cloud Gateway 提供更优秀的性能更强大的有功能。 Spring Cloud Gateway 是由 WebFlux Netty Reactor 实现的响应式的 API 网关。它不能在传统的 servlet 容器中工作也不能构建成 war 包。 Spring Cloud Gateway 旨在为微服务架构提供一种简单且有效的 API 路由的管理方式并基于 Filter 的方式提供网关的基本功能例如说安全认证、监控、限流等等。 官网文档https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories 1.1 核心概念 路由route) 路由是网关中最基础的部分路由信息包括一个ID、一个目的URI、一组断言工厂、一组Filter组成。如果断言为真则说明请求的URL和配置的路由匹配。断言(predicates) Java8中的断言函数SpringCloud Gateway中的断言函数类型是Spring5.0框架中的ServerWebExchange。断言函数允许开发者去定义匹配Http request中的任何信息比如请求头和参数等。过滤器Filter) SpringCloud Gateway中的filter分为Gateway FilIer和Global Filter。Filter可以对请求和响应进行处理。 1.2 工作原理 Spring Cloud Gateway 的工作原理跟 Zuul 的差不多最大的区别就是 Gateway 的 Filter 只有 pre 和 post 两种。 客户端向 Spring Cloud Gateway 发出请求如果请求与网关程序定义的路由匹配则该请求就会被发送到网关 Web 处理程序此时处理程序运行特定的请求过滤器链。 过滤器之间用虚线分开的原因是过滤器可能会在发送代理请求的前后执行逻辑。所有 pre 过滤器逻辑先执行然后执行代理请求代理请求完成后执行 post 过滤器逻辑。 二 Spring Cloud Gateway快速开始 2.1 环境搭建 引入依赖 !-- gateway网关 -- dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId /dependency!-- nacos服务注册与发现 -- dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId /dependency注意会和spring-webmvc的依赖冲突需要排除spring-webmvc 编写yml配置文件 server:port: 8888 spring:application:name: mall-gateway#配置nacos注册中心地址cloud:nacos:discovery:server-addr: 127.0.0.1:8848gateway:discovery:locator:# 默认为false设为true开启通过微服务创建路由的功能即可以通过微服务名访问服务# http://localhost:8888/mall-order/order/findOrderByUserId/1enabled: true# 是否开启网关 enabled: true 测试 2.2 路由断言工厂Route Predicate Factories配置 https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories 网关启动日志 2.2.1 时间匹配 可以用在限时抢购的一些场景中。 spring:cloud:gateway:#设置路由路由id、路由到微服务的uri、断言routes:- id: order_route #路由ID全局唯一uri: http://localhost:8020 #目标微服务的请求地址和端口predicates:# 测试http://localhost:8888/order/findOrderByUserId/1# 匹配在指定的日期时间之后发生的请求 入参是ZonedDateTime类型- After2021-01-31T22:22:07.78308:00[Asia/Shanghai]获取ZonedDateTime类型的指定日期时间 ZonedDateTime zonedDateTime ZonedDateTime.now();//默认时区 // 用指定时区获取当前时间 ZonedDateTime zonedDateTime2 ZonedDateTime.now(ZoneId.of(Asia/Shanghai));设置时间之前发起请求 超过设置时间之后再次请求 2.2.2 Cookie匹配 spring:cloud:gateway:#设置路由路由id、路由到微服务的uri、断言routes:- id: order_route #路由ID全局唯一uri: http://localhost:8020 #目标微服务的请求地址和端口predicates:# Cookie匹配- Cookieusername, foxpostman测试 curl测试 2.2.3 Header匹配 spring:cloud:gateway:#设置路由路由id、路由到微服务的uri、断言routes:- id: order_route #路由ID全局唯一uri: http://localhost:8020 #目标微服务的请求地址和端口predicates:# Header匹配 请求中带有请求头名为 x-request-id其值与 \d 正则表达式匹配#- HeaderX-Request-Id, \d测试 2.2.4 路径匹配 spring:cloud:gateway:#设置路由路由id、路由到微服务的uri、断言routes:- id: order_route #路由ID全局唯一uri: http://localhost:8020 #目标微服务的请求地址和端口predicates:# 测试http://localhost:8888/order/findOrderByUserId/1- Path/order/** #Path路径匹配2.2.5 自定义路由断言工厂 自定义路由断言工厂需要继承 AbstractRoutePredicateFactory 类重写 apply 方法的逻辑。在 apply 方法中可以通过 exchange.getRequest() 拿到 ServerHttpRequest 对象从而可以获取到请求的参数、请求方式、请求头等信息。 注意 命名需要以 RoutePredicateFactory 结尾 Component Slf4j public class CheckAuthRoutePredicateFactory extends AbstractRoutePredicateFactoryCheckAuthRoutePredicateFactory.Config {public CheckAuthRoutePredicateFactory() {super(Config.class);}Overridepublic PredicateServerWebExchange apply(Config config) {return new GatewayPredicate() {Overridepublic boolean test(ServerWebExchange serverWebExchange) {log.info(调用CheckAuthRoutePredicateFactory config.getName());if(config.getName().equals(fox)){return true;}return false;}};}/*** 快捷配置* return*/Overridepublic ListString shortcutFieldOrder() {return Collections.singletonList(name);}public static class Config {private String name;public String getName() {return name;}public void setName(String name) {this.name name;}} }yml中配置 spring:cloud:gateway:#设置路由路由id、路由到微服务的uri、断言routes:- id: order_route #路由ID全局唯一uri: http://localhost:8020 #目标微服务的请求地址和端口predicates:# 测试http://localhost:8888/order/findOrderByUserId/1- Path/order/** #Path路径匹配#自定义CheckAuth断言工厂 # - name: CheckAuth # args: # name: fox- CheckAuthfox 2.3 过滤器工厂 GatewayFilter Factories配置 SpringCloudGateway 内置了很多的过滤器工厂我们通过一些过滤器工厂可以进行一些业务逻辑处理器比如添加剔除响应头添加去除参数等 https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories 2.3.1 添加请求头 spring:cloud:gateway:#设置路由路由id、路由到微服务的uri、断言routes:- id: order_route #路由ID全局唯一uri: http://localhost:8020 #目标微服务的请求地址和端口#配置过滤器工厂filters:- AddRequestHeaderX-Request-color, red #添加请求头测试http://localhost:8888/order/testgateway GetMapping(/testgateway) public String testGateway(HttpServletRequest request) throws Exception {log.info(gateWay获取请求头X-Request-colorrequest.getHeader(X-Request-color));return success; } GetMapping(/testgateway2) public String testGateway(RequestHeader(X-Request-color) String color) throws Exception {log.info(gateWay获取请求头X-Request-colorcolor);return success; }2.3.2 添加请求参数 spring:cloud:gateway:#设置路由路由id、路由到微服务的uri、断言routes:- id: order_route #路由ID全局唯一uri: http://localhost:8020 #目标微服务的请求地址和端口#配置过滤器工厂filters:- AddRequestParametercolor, blue # 添加请求参数测试http://localhost:8888/order/testgateway3 GetMapping(/testgateway3) public String testGateway3(RequestParam(color) String color) throws Exception {log.info(gateWay获取请求参数color:color);return success; }2.3.3 为匹配的路由统一添加前缀 spring:cloud:gateway:#设置路由路由id、路由到微服务的uri、断言routes:- id: order_route #路由ID全局唯一uri: http://localhost:8020 #目标微服务的请求地址和端口#配置过滤器工厂filters:- PrefixPath/mall-order # 添加前缀 对应微服务需要配置context-pathmall-order中需要配置 server:servlet:context-path: /mall-order测试http://localhost:8888/order/findOrderByUserId/1 》 http://localhost:8020/mall-order/order/findOrderByUserId/1 2.3.4 重定向操作 spring:cloud:gateway:#设置路由路由id、路由到微服务的uri、断言routes:- id: order_route #路由ID全局唯一uri: http://localhost:8020 #目标微服务的请求地址和端口#配置过滤器工厂filters:- RedirectTo302, https://www.baidu.com/ #重定向到百度测试http://localhost:8888/order/findOrderByUserId/1 2.3.5 自定义过滤器工厂 继承AbstractNameValueGatewayFilterFactory且我们的自定义名称必须要以GatewayFilterFactory结尾并交给spring管理。 Component Slf4j public class CheckAuthGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory {Overridepublic GatewayFilter apply(NameValueConfig config) {return (exchange, chain) - {log.info(调用CheckAuthGatewayFilterFactory config.getName() : config.getValue());return chain.filter(exchange);};} }配置自定义的过滤器工厂 spring:cloud:gateway:#设置路由路由id、路由到微服务的uri、断言routes:- id: order_route #路由ID全局唯一uri: http://localhost:8020 #目标微服务的请求地址和端口#配置过滤器工厂filters:- CheckAuthfox,男测试 2.4 全局过滤器Global Filters配置 GlobalFilter 接口和 GatewayFilter 有一样的接口定义只不过 GlobalFilter 会作用于所有路由。 官方声明GlobalFilter的接口定义以及用法在未来的版本可能会发生变化。 2.4.1 LoadBalancerClientFilter LoadBalancerClientFilter 会查看exchange的属性 ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR 的值一个URI如果该值的scheme是 lb比如lb://myservice 它将会使用Spring Cloud的LoadBalancerClient 来将 myservice 解析成实际的host和port并替换掉 ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR 的内容。 其实就是用来整合负载均衡器Ribbon的 spring:cloud:gateway:routes:- id: order_routeuri: lb://mall-orderpredicates:- Path/order/**2.4.2 自定义全局过滤器 Component Order(-1) Slf4j public class CheckAuthFilter implements GlobalFilter {Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {//校验请求头中的tokenListString token exchange.getRequest().getHeaders().get(token);log.info(token: token);if (token.isEmpty()){return null;}return chain.filter(exchange);} }Component public class CheckIPFilter implements GlobalFilter, Ordered {Overridepublic int getOrder() {return 0;}Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {HttpHeaders headers exchange.getRequest().getHeaders();//模拟对 IP 的访问限制即不在 IP 白名单中就不能调用的需求if (getIp(headers).equals(127.0.0.1)) {return null;}return chain.filter(exchange);}private String getIp(HttpHeaders headers) {return headers.getHost().getHostName();} }2.5 Gateway跨域配置CORS Configuration 通过yml配置的方式 https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#cors-configuration spring:cloud:gateway:globalcors:cors-configurations:[/**]:allowedOrigins: *allowedMethods:- GET- POST- DELETE- PUT- OPTION通过java配置的方式 Configuration public class CorsConfig {Beanpublic CorsWebFilter corsFilter() {CorsConfiguration config new CorsConfiguration();config.addAllowedMethod(*);config.addAllowedOrigin(*);config.addAllowedHeader(*);UrlBasedCorsConfigurationSource source new UrlBasedCorsConfigurationSource(new PathPatternParser());source.registerCorsConfiguration(/**, config);return new CorsWebFilter(source);} }2.6 gateway整合sentinel限流 https://github.com/alibaba/Sentinel/wiki/%E7%BD%91%E5%85%B3%E9%99%90%E6%B5%81 从 1.6.0 版本开始Sentinel 提供了 Spring Cloud Gateway 的适配模块可以提供两种资源维度的限流 route 维度即在 Spring 配置文件中配置的路由条目资源名为对应的 routeId自定义 API 维度用户可以利用 Sentinel 提供的 API 来自定义一些 API 分组 2.6.1 快速开始 使用时需引入依赖 dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-spring-cloud-gateway-adapter/artifactIdversionx.y.z/version /dependency接入sentinel dashboard添加yml配置 spring:application:name: mall-gateway-sentinel-demo#配置nacos注册中心地址cloud:nacos:discovery:server-addr: 127.0.0.1:8848sentinel:transport:# 添加sentinel的控制台地址dashboard: 127.0.0.1:8080使用时只需注入对应的 SentinelGatewayFilter 实例以及 SentinelGatewayBlockExceptionHandler 实例即可 Configuration public class GatewayConfiguration {private final ListViewResolver viewResolvers;private final ServerCodecConfigurer serverCodecConfigurer;public GatewayConfiguration(ObjectProviderListViewResolver viewResolversProvider,ServerCodecConfigurer serverCodecConfigurer) {this.viewResolvers viewResolversProvider.getIfAvailable(Collections::emptyList);this.serverCodecConfigurer serverCodecConfigurer;}/*** 限流异常处理器* return*/BeanOrder(Ordered.HIGHEST_PRECEDENCE)public SentinelGatewayBlockExceptionHandler sentinelGatewayBlockExceptionHandler() {// Register the block exception handler for Spring Cloud Gateway.return new SentinelGatewayBlockExceptionHandler(viewResolvers, serverCodecConfigurer);}/*** 限流过滤器* return*/BeanOrder(Ordered.HIGHEST_PRECEDENCE)public GlobalFilter sentinelGatewayFilter() {return new SentinelGatewayFilter();}}用户可以通过 GatewayRuleManager.loadRules(rules) 手动加载网关规则 GatewayConfiguration中添加 PostConstructpublic void doInit() {//初始化自定义的APIinitCustomizedApis();//初始化网关限流规则initGatewayRules();//自定义限流异常处理器initBlockRequestHandler();}private void initCustomizedApis() {SetApiDefinition definitions new HashSet();ApiDefinition api new ApiDefinition(user_service_api).setPredicateItems(new HashSetApiPredicateItem() {{add(new ApiPathPredicateItem().setPattern(/user/**).setMatchStrategy(SentinelGatewayConstants.URL_MATCH_STRATEGY_PREFIX));}});definitions.add(api);GatewayApiDefinitionManager.loadApiDefinitions(definitions);}private void initGatewayRules() {SetGatewayFlowRule rules new HashSet();//resource资源名称可以是网关中的 route 名称或者用户自定义的 API 分组名称。//count限流阈值//intervalSec统计时间窗口单位是秒默认是 1 秒。rules.add(new GatewayFlowRule(order_route).setCount(2).setIntervalSec(1));rules.add(new GatewayFlowRule(user_service_api).setCount(2).setIntervalSec(1));// 加载网关规则GatewayRuleManager.loadRules(rules);}private void initBlockRequestHandler() {BlockRequestHandler blockRequestHandler new BlockRequestHandler() {Overridepublic MonoServerResponse handleRequest(ServerWebExchange exchange, Throwable t) {HashMapString, String result new HashMap();result.put(code,String.valueOf(HttpStatus.TOO_MANY_REQUESTS.value()));result.put(msg, HttpStatus.TOO_MANY_REQUESTS.getReasonPhrase());return ServerResponse.status(HttpStatus.TOO_MANY_REQUESTS).contentType(MediaType.APPLICATION_JSON).body(BodyInserters.fromValue(result));}};//设置自定义异常处理器GatewayCallbackManager.setBlockHandler(blockRequestHandler);}2.6.2 网关流控控制台 Sentinel 1.6.3 引入了网关流控控制台的支持用户可以直接在 Sentinel 控制台上查看 API Gateway 实时的 route 和自定义 API 分组监控管理网关规则和 API 分组配置。 在 API Gateway 端用户只需要在原有启动参数的基础上添加如下启动参数即可标记应用为 API Gateway 类型 # 注通过 Spring Cloud Alibaba Sentinel 自动接入的 API Gateway 整合则无需此参数 -Dcsp.sentinel.app.type12.6.3 网关流控实现原理 2.7 网关高可用 为了保证 Gateway 的高可用性可以同时启动多个 Gateway 实例进行负载在 Gateway 的上游使用 Nginx 或者 F5 进行负载转发以达到高可用。
http://www.pierceye.com/news/761962/

相关文章:

  • 如何用云服务器搭建个人网站有些人做网站不用钱的,对吗?
  • 月嫂网站建设方案建设网站询价对比表模板
  • 医院网站建设 价格低深圳市高端网站建设
  • 太原做学校网站的公司网站免费观看
  • 企业网络营销是什么seo教程百度云
  • wordpress 下载站模板高清免费观看电视网站
  • 网站后期维护怎么做招c1驾驶员300元一天
  • 番禺区移动端网站制作山西省两学一做网站
  • 网上销售 网站建设浙江创都建设有限公司网站
  • 网站商城的公司运营结构html5 app开发工具
  • 酒类网站建设方案案中山网站建设公司排名
  • wordpress怎么做子页面如何刷seo关键词排名
  • 网站怎样做免费优化有效果成都十大好的装修公司
  • 网站外链分析工具新闻发布会主持词
  • 网站开发哪个工具学做网站需要懂什么
  • 一般做推广网站的客户需求仕什么赣州市城乡建设局官方网站
  • 中山网站搜索引擎优化婚庆策划公司的商业模式
  • 百度云主机做网站天津展示型网站建设外包
  • 做公司网站利润营销型企业网站系统模板下载
  • 怎样在绍兴e网做网站衡水网站优化
  • 网站建设现在还有没有市场优秀网站建设报价
  • 兰州网站维护公司网站规划有哪些内容
  • 简单展示网站模板电脑网页打不开
  • 陕西省建设局网站手把手教 个人网站开发
  • 重庆网站制作网站后台上传缩略图
  • 红谷滩园林建设集团有限公司 网站大气网络公司网站模板
  • 淮安市网站东莞关键词排名seo
  • 网站建设制作设计seo优化湖南个人信用信息服务平台
  • 运营网站wordpress改了固定链接
  • 咸阳市住房和城乡建设局网站网站建设外包必须注意几点