6、Predicate的使用
6.1、是什么
启动gateway9527 发现:
Route Predicate Factories这个是什么东东?
Spring Cloud Gateway将路由匹配作为Spring WebFlux HandlerMapping基础架构的一部分。
Spring Cloud Gateway包括许多内置的Route Predicate工厂。所有这些Predicate都与HTTP请求的不同属性匹配。多个Route Predicate工厂可以进行组合
6.2、常用的Route Predicate
-
After Route Predicate
上述这个After好懂,这个时间串串???
import java.time.ZonedDateTime; /** * @author likun * @create 2021-04-30 22:25 */ public class T1 { public static void main(String[] args) { ZonedDateTime time = ZonedDateTime.now(); System.out.println(time); } }
运行
YML
在-Path=/payment/lb/** 下面加
- After=2021-04-30T22:26:22.226+08:00[Asia/Shanghai] # 断言,路径相匹配的进行路
意思是从这个时间戳开始生效
curl测试
-
Before Route Predicate
用法同上,意思是在这个时间戳之前生效
-
Between Route Predicate
-Between=2021-04-30T22:26:22.226+08:00[Asia/Shanghai],2022-04-30T22:26:22.226+08:00[Asia/Shanghai]
用法同上,意思是在这两个时间戳之间生效
-
Cookie Route Predicate
Cookie Route Predicate需要两个参数,一个是 Cookie name ,一个是正则表达式。
路由规则会通过获取对应的 Cookie name 值和正则表达式去匹配,如果匹配上就会执行路由,如果没有匹配上则不执行YML加 - Cookie=username,lk
测试:
-
不带cookies访问
-
带cookies访问
说明:加入curl返回中文乱码https://blog.csdn.net/leedee/article/details/82685636
-
-
Header Route Predicate
两个参数:一个是属性名称和一个正则表达式,这个属性值和正则表达式匹配则执行。
-Header=X-Request-Id, \d+ # 请求头要有X-Request-Id属性并且值为整数的正则表达式
-
Host Route Predicate
Host Route Predicate 接收一组参数,一组匹配的域名列表,这个模板是一个 ant 分隔的模板,用.号作为分隔符。
它通过参数中的主机地址作为匹配规则。 -
Method Route Predicate
-
Path Route Predicate
-
Query Route Predicate
支持传入两个参数,一个是属性名,一个为属性值,属性值可以是正则表达式。
-
小总结
ALL
server: port: 9527 spring: application: name: cloud-gateway cloud: gateway: discovery: locator: enabled: true #开启从注册中心动态创建路由的功能 routes: - id: payment_routh #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名 # uri: http://localhost:8001 #匹配后提供服务的路由地址 uri: lb://cloud-payment-service #匹配后提供服务的路由地址 predicates: - Path=/payment/get/** # 断言,路径相匹配的进行路由 - id: payment_routh2 #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名 # uri: http://localhost:8001 #匹配后提供服务的路由地址 uri: lb://cloud-payment-service #匹配后提供服务的路由地址 predicates: - Path=/payment/lb/** # 断言,路径相匹配的进行路由 - After=2020-02-05T15:10:03.685+08:00[Asia/Shanghai] # 断言,路径相匹配的进行路由 #- Before=2020-02-05T15:10:03.685+08:00[Asia/Shanghai] # 断言,路径相匹配的进行路由 #- Between=2020-02-02T17:45:06.206+08:00[Asia/Shanghai],2020-03-25T18:59:06.206+08:00[Asia/Shanghai] #- Cookie=username,lk #- Header=X-Request-Id, \d+ # 请求头要有X-Request-Id属性并且值为整数的正则表达式 #- Host=**.atguigu.com - Method=GET - Query=username, \d+ # 要有参数名username并且值还要是整数才能路由 eureka: instance: hostname: cloud-gateway-service client: #服务提供者provider注册进eureka服务列表内 service-url: register-with-eureka: true fetch-registry: true defaultZone: http://eureka7001.com:7001/eureka #id:我们自定义的路由 ID,保持唯一 ##uri:目标服务地址 ##predicates:路由条件,Predicate接受一个输入参数返回一个布尔值。 ## 该属性包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非)
说白了,Predicate就是为了实现一组匹配规则,让请求过来找到对应的Route进行处理。