⑥. Predicate的使用
①. Predicate的概述
- ①. Predicate就是为了实现一组匹配规则,让请求过来找到对应的Route进行处理
- ②. Predicate的介绍(启动我们的gatewat9527)
③. Route Predicate Factories这个是什么东东?
下面代码非常重要,需要重点掌握
//常用的时间串串 public class ZonedDateTimeDemo { public static void main(String[] args) { ZonedDateTime zbj = ZonedDateTime.now(); // 默认时区 System.out.println(zbj);//2021-07-16T19:39:36.874+08:00[Asia/Shanghai] ZonedDateTime zny = ZonedDateTime.now(ZoneId.of("America/New_York")); // 用指定时区获取当前时间 //2021-07-16T07:39:36.876-04:00[America/New_York] System.out.println(zny); } }
②. 常用的Route Predicate
- ①. After Route Predicate
//常用的时间串串 public class ZonedDateTimeDemo { public static void main(String[] args) { ZonedDateTime zbj = ZonedDateTime.now(); // 默认时区 System.out.println(zbj);//2021-07-16T19:39:36.874+08:00[Asia/Shanghai] ZonedDateTime zny = ZonedDateTime.now(ZoneId.of("America/New_York")); // 用指定时区获取当前时间 //2021-07-16T07:39:36.876-04:00[America/New_York] System.out.println(zny); } }
spring: cloud: gateway: discovery: locator: enabled: true #开启从注册中心动态创建路由的功能 routes: - 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 Route Predicate
③. Between Route Predicate
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 Route Predicate
⑤. Header Route Predicate
spring: application: name: cloud-gateway cloud: gateway: discovery: locator: enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由 routes: - id: payment_routh #路由的ID,没有固定规则但要求唯一,建议配合服务名 #uri: http://localhost:8001 #匹配后提供服务的路由地址 uri: lb://CLOUD-PAYMENT-SERVICE #匹配后提供服务的路由地址 predicates: - Path=/payment/get/** #断言,路径相匹配的进行路由 - After=2021-07-28T10:59:34.102+08:00[Asia/Shanghai] - id: payment_routh2 #uri: http://localhost:8001 uri: lb://CLOUD-PAYMENT-SERVICE #匹配后提供服务的路由地址 predicates: - Path=/payment/lb/** #断言,路径相匹配的进行路由 #- Before=2021-07-28T10:59:34.102+08:00[Asia/Shanghai] #- Cookie=username, TANGZHI - Header=X-Request-Id, \d+ # 请求头要有X-Request-Id属性并且值为整数的正则表达式
⑥. Host Route Predicate
正确:curl http://localhost:9527/payment/lb -H “Host: www.tangzhi.com”
正确:curl http://localhost:9527/payment/lb -H “Host: java.tangzhi2.com”
错误:curl http://localhost:9527/payment/lb -H “Host: java.tangzhi2.net”
- Host=**.tangzhi.com,**.tangzhi2.com
⑦. Method Route Predicate
- Method=GET
⑧. Path Route Predicate
# 断言,路径相匹配的进行路由 - Path=/payment/lb/**
⑨. Query Route Predicate
- Query=username, \d+ # 要有参数名username并且值还要是整数才能路由
⑩. All code如下:
spring cloud: gateway: discovery: locator: enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由 routes: - id: payment_routh #路由的ID,没有固定规则但要求唯一,建议配合服务名 #uri: http://localhost:8001 #匹配后提供服务的路由地址 uri: lb://cloud-payment-service predicates: - Path=/payment/get/** #断言,路径相匹配的进行路由 - id: payment_routh2 #uri: http://localhost:8001 #匹配后提供服务的路由地址 uri: lb://cloud-payment-service predicates: - Path=/payment/lb/** #断言,路径相匹配的进行路由 #- After=2020-03-08T10:59:34.102+08:00[Asia/Shanghai] #- Cookie=username,zhangshuai #并且Cookie是username=zhangshuai才能访问 #- Header=X-Request-Id, \d+ #请求头中要有X-Request-Id属性并且值为整数的正则表达式 #- Host=**.tangzhi.com #- Method=GET #- Query=username, \d+ #要有参数名称并且是正整数才能路由