SpringCloud使用Gateway的断言种类以及规则
基础提要:SpringCloud中的Gateway网关.
这里是我们9527网关服务的yml配置文件,可以看到是动态路由,根据断言(predicates)匹配到/testGateWay01路径的请求后,再通过服务名SPRINGCLOUD-PROVIDER-DEPT去服务注册中心负载均衡地获取到服务并访问!
spring:
application:
name: cloud-gateway
cloud:
gateway:
discovery:
locator:
enabled: true #启动动态路由,也就是说网关现在会根据服务名去找到对应的服务
routes:
- id: provider_routh
uri: lb://SPRINGCLOUD-PROVIDER-DEPT #目标微服务名!而且是以负载均衡方式去获取!
predicates: #断言
- Path=/testGateWay01
- id: provider_routh2
uri: lb://SPRINGCLOUD-PROVIDER-DEPT
predicates:
- Path=/testGateWay02
上面用的path 只是predicate 中的一个
有哪几种?
这里介绍一下
1.After、Before、Between 路由断言
先看配置文件!
routes:
- id: provider_routh
uri: lb://SPRINGCLOUD-PROVIDER-DEPT #目标微服务名!而且是以负载均衡方式去获取!
predicates: #断言
- Path=/testGateWay01
- After=2021-07-04T19:16:43.338+08:00[Asia/Shanghai]
什么意思???
简单一说就知道了,就是给我们的断言有多加了一个匹配规则,除了要满足访问路径是/testGateWay01以外,还要满足当前请求的时间必须是在2021-07-04 19:16:43.338+08:00以后!也就是After某某时间以后,断言才会进行匹配!
Before、Between顾名思义也就明白了:在某某时间以前、在某两个时间之间
如果我们不在规定的时间窗口内访问,就会报错!
2.Cookie 路由断言
Cookie 断言有两个参数,一个cookie 名称和一个java 正则表达式,这个断言匹配给定的cookie 名和值正则匹配的请求。
routes:
- id: provider_routh
uri: lb://SPRINGCLOUD-PROVIDER-DEPT #目标微服务名!而且是以负载均衡方式去获取!
predicates: #断言
- Path=/testGateWay01
- Cookie=username, ybz
白话文理解:就是一个键值对!请求的Cookie必须要有一个键值对username:ybz。满足我就给你访问,否则就给老子滚
3.Header 路由断言
Header断言有两个参数,一个参数名,一个正则。只有当有这个参数并且值匹配正则的时候才能执行下去。
routes:
- id: provider_routh
uri: lb://SPRINGCLOUD-PROVIDER-DEPT #目标微服务名!而且是以负载均衡方式去获取!
predicates: #断言
- Path=/testGateWay01
- Header=X-Request-Id, \d+
这个路由规则匹配Header中包含X-Request-Id并且值为纯数字的请求。
4.Host 路由断言
Host 路由断言接受一个正则域名列表,正则是用英文句号分割的正则表达式。
routes:
- id: provider_routh
uri: lb://SPRINGCLOUD-PROVIDER-DEPT #目标微服务名!而且是以负载均衡方式去获取!
predicates: #断言
- Path=/testGateWay01
- Host=**.ybz.com
这个路由规则匹配Header中必须包含**.ybz.com
5.Method 路由断言
Method路由断言匹配一个或多个Http请求方式(GET POST PUT DELETE HEAD).
routes:
- id: provider_routh
uri: lb://SPRINGCLOUD-PROVIDER-DEPT #目标微服务名!而且是以负载均衡方式去获取!
predicates: #断言
- Path=/testGateWay01
- Method=GET,POST
这个路由匹配所有的GET POST请求。
6.Query 查询路由断言
Query路由断言有两个参数: 一个必传参数 和一个可选的正则表达式。
routes:
- id: provider_routh
uri: lb://SPRINGCLOUD-PROVIDER-DEPT #目标微服务名!而且是以负载均衡方式去获取!
predicates: #断言
- Path=/testGateWay01
- Query=green
- Query=red, gree.
1.如果请求中包含green的参数,则匹配成功。
2.如果一个请求中包含参数red并且值匹配·gree.·这个正则,那么路由匹配。比如:green和greet。
拓展
2.Gateway中的filter.
好了 基本已经讲完,欢迎大家评论区指出不足,一起学习进步!
大家看完了点个赞,码字不容易啊。。。