合肥网站建设行情,国家防疫政策最新调整,网站策划运营,wordpress主题套用教程Spring Cloud Gateway主要功能#xff1a;
反向代理认证鉴权流量控制熔断日志监控官方解释#xff1a;客户端SpringCloud Gateway发出请求#xff0c;然后在Gateway Handler Mapping中找到与之请求相匹配的路由#xff0c;将其发送到Gateway Web Handler#xff0c;Handle…Spring Cloud Gateway主要功能反向代理认证鉴权流量控制熔断日志监控官方解释客户端SpringCloud Gateway发出请求然后在Gateway Handler Mapping中找到与之请求相匹配的路由将其发送到Gateway Web HandlerHandler再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑然后返回。过滤器之间用虚线分开是因为过滤器可能会发在代理请求之前“pre”或之后“post”执行业务逻辑这样Filter在“pre”类型的过滤器可以做参数校验权限校验流量监控日志输出协议转换等在“post”类型的过滤器可以做响应内容响应头的修改日志的输出流量监控等有着非常重要的作用一、安装1、新建一个微服务1.1、新建gateway子模块1.2、引入依赖gateway服务依赖dependencies dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId /dependency dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-loadbalancer/artifactId /dependency dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-gateway/artifactId /dependency /dependencies2、配置服务2.1、创建启动类SpringBootApplicationpublicclassMdxShopGateWayApplication{publicstaticvoidmain(String[]args){SpringApplication.run(MdxShopGateWayApplication.class,args);}}2.2、创建application.yml配置文件spring:application:name:gatewaycloud:nacos:server-addr:http://192.168.88.139:8848discovery:username:nacospassword:nacosserver:port:80二、配置路由规则springcloud 提供了两种方式通过配置文件的方式进行配置通过编码的方式进行配置1、配置文件创建application-route.yml文件application-route.yml:spring:cloud:gateway:routes:-id:order-serviceuri:lb://service-order#lb load balancer(负载均衡predicates:# 断言-Path/order/**order:0# 路由的优先级, 越小优先级越高(默认为0)-id:product-serviceuri:lb://service-productpredicates:-Path/product/**记得在application.yml中引入spring:profiles:include:route基础原理路由断言主要用来判断路由的规则。配置文件中写的断言规则只是字符串这些字符串会被Predicate Factory读取并处理。例如Path/user/**是按照路径匹配这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理。像这样的断言工厂在SpringCloudGateway还有十几个:名称说明示例After是某个时间点后的请求- After2022-01-20T14:32:27.789-07:00[Asia/Shanghai]Before是某个时间点之前的请求- Before2022-04-13T15:14:47.43308:00[Asia/Shanghai]Between是某两个时间点之前的请求- Between2021-01-20T17:42:47.789-07:00[Asia/Shanghai], 2023-01-21T17:42:47.789-07:00[Asia/Shanghai]Cookie请求必须包含某些cookie- CookiechocolateHeader请求必须包含某些header- Headerasd, casHost请求必须是访问某个host域名- Hostbaidu.com, jd.comMethod请求方式必须是指定方式- MethodGET,POSTPath请求路径必须符合指定规则- Path/user/{params},/card/**Query请求参数必须包含指定参数- Queryname, JackRemoteAddr请求者的ip必须是指定范围- RemoteAddr192.168.1.1/24Weight权重处理实际使用时根绝业务要求选择使用即可。不过一般来讲最常用的是使用Path这种断言工厂仅用它就能满足常见的需求了。2、编码配置三、过滤器过滤器执行的顺序请求先 依次通过每个过滤器的前置过滤然后 倒序的通过每个过滤器的后置过滤常用的几个有名称说明AddRequestHeader给当前请求添加一个请求头RemoveRequestHeader移除请求中的一个请求头AddResponseHeader给响应结果中添加一个响应头RemoveResponseHeader从响应结果中移除有一个响应头RequestRateLimiter限制请求的流量RewritePath进行路由转发1、局部过滤器2、全局过滤器spring:cloud:gateway:routes:-id:user-serviceuri:lb://userservicepredicates:-Path/user/**default-filters:# 默认过滤器配置-AddRequestHeadertoken,test# 添加请求头四、自定义全局路由过滤器有时候SpringCloudGateWay提供的过滤器工厂不能满足自己的要求。可能有时候需要在过滤时做一些其它的逻辑操作。那么这时候可以选择使用java代码自定义全局过滤器。代码示例ComponentSlf4jpublicclassRtGlobalFilterimplementsGlobalFilter,Ordered{OverridepublicMonoVoidfilter(ServerWebExchangeexchange,GatewayFilterChainchain){ServerHttpRequestrequestexchange.getRequest();ServerHttpResponseresponseexchange.getResponse();StringrequestURIrequest.getURI().getPath();longstartTimeSystem.currentTimeMillis();log.info(请求【{}】开始时间{},requestURI,startTime);// 以上是前置逻辑 MonoVoidfilterchain.filter(exchange).doFinally((result)-{// 以下是后置逻辑 long endTime System.currentTimeMillis();log.info(请求【{}】结束时间{}耗时{}ms,requestURI,endTime,endTime-startTime);});// 放行returnfilter;}OverridepublicintgetOrder(){return0;}}当有多个过滤器时Order的值决定了过滤器的执行顺序。数值越大优先级越低 负的越多 优先级越高。主要有两种方式1如上述代码这样2使用Order注解五、全局跨域只需要修改一下配置即可spring:cloud:gateway:globalcors:cors-configurations:[/**]:# 匹配所有路径allowed-origin-patterns:*# 允许所有源allowed-headers:*# 允许所有请求头allowed-methods:*# 允许所有请求方法请求就携带了 跨域的请求头