当前位置: 首页 > 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.zqtcl.cn/news/761962/

相关文章:

  • html5可以做交互网站吗打开网站说建设中是什么问题?
  • 彩票网站开发制作需要什么wordpress 在线预览
  • 外贸平台app衡水seo排名
  • 怎样做网站表白墙东莞商城网站推广建设
  • 郑州郑州网站建设河南做网站公司哪家好爱站长尾词挖掘工具
  • dede网站地图文章变量网站qq 微信分享怎么做
  • 越南做网站网站建设以及运营方面
  • 广西建网站哪家好网站关闭与域名备案
  • 网站开发版本号婚庆网站建设策划案费用预算
  • 厦门建设网站制作中山市哪家公司做网站
  • 网站路径wordpress制作电商网站
  • 江西网站开发哪家专业装饰设计公司网站
  • 企业网站策划实训Wordpress 主题简化
  • 做网站点击挣钱不兰州工程建设信息网站
  • 网站说服力 营销...免费看片网站
  • 深圳招聘网站大全制作网站软件下载
  • 网站建设说明哈尔滨网站建设渠道
  • 一 网站建设管理基本情况设计类的网站
  • wordpress产品编辑如何优化wordpress
  • 网站后台更新缓存失败网站平台规划方案
  • 网站开发需求分析主要内容saas建站系统是怎么实现的
  • 做qq头像的网站有哪些wordpress怎么部署到虚拟linux服务器
  • 征求网站建设企业网站建设word
  • 市民服务中心网站建设小型公众号开发
  • 服装网站建设策划书论文基层建设刊物网站
  • 网站建设合同技术开发合同范本wordpress备份和还原
  • 物流信息平台网站建设一流本科专业建设点网站
  • 天猫网站建设的目标是什么装潢设计软件
  • 电商网站首页图片网站功能模块建设
  • 邮件服务器是不是网站服务器黄江网站建设公司