SpringCloud 学习 --->>> 11、Gateway 新一代网关 -->> Predicate 断言
Predicate 断言
常用的Route Predicate
-
The After Route Predicate Factory
- 此断言匹配在指定日期时间之后发生的请求。
- 官网示例
spring: cloud: gateway: routes: - id: after_route uri: https://example.org predicates: - After=2017-01-20T17:42:47.789-07:00[America/Denver]
-
获取时间串
-
System.out.println(ZonedDateTime.now());
-
Before Route Predicate
-
此断言匹配在指定日期时间之前发生的请求。
-
官网示例
spring: cloud: gateway: routes: - id: before_route uri: https://example.org predicates: - Before=2017-01-20T17:42:47.789-07:00[America/Denver]
-
-
The Between Route Predicate Factory
- 此断言匹配发生在 after
datetime1
和 before的请求datetime2
。datetime2
参数必须在datetime1
之后 - 官网实例
spring: cloud: gateway: routes: - id: between_route uri: https://example.org predicates: - Between=2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]
- 此断言匹配发生在 after
-
Cookie Route Predicate
- 此断言匹配具有给定名称且其值与正则表达式匹配的 cookie。前面是cookiename,后面是正则表达式,对cookie的要求
- 官网示例,此路由匹配具有名为
chocolate
其值与ch.p
正则表达式匹配的 cookie 的请求。
spring: cloud: gateway: routes: - id: cookie_route uri: https://example.org predicates: - Cookie=chocolate, ch.p
-
Header Route Predicate
- 此断言与具有给定名称且值与正则表达式匹配的header匹配
- 官网示例,如果请求具有一个名为
X-Request-Id
其值与\d+
正则表达式匹配的标头(即,它具有一个或多个数字的值),则此路由匹配。
spring: cloud: gateway: routes: - id: header_route uri: https://example.org predicates: - Header=X-Request-Id, \d+
-
Host Route Predicate
- 该模式是一种 Ant 风格的模式,以分隔符为
.
分隔符。此断言匹配Host
与模式匹配的标头。 - 官网示例,如果请求具有
Host
值为www.somehost.org
orbeta.somehost.org
或的标头,则此路由匹配www.anotherhost.org
。
spring: cloud: gateway: routes: - id: host_route uri: https://example.org predicates: - Host=**.somehost.org,**.anotherhost.org
- 该模式是一种 Ant 风格的模式,以分隔符为
-
Method Route Predicate
- 匹配指定请求方式的请求
- 官网示例
spring: cloud: gateway: routes: - id: method_route uri: https://example.org predicates: - Method=GET,POST
-
Path Route Predicate
-
匹配指定路径的请求
-
官网示例
spring: cloud: gateway: routes: - id: path_route uri: https://example.org predicates: - Path=/red/{segment},/blue/{segment}
-
-
Query Route Predicate
Query
路由断言工厂有两个参数:一个必需的param
和一个可选的regexp
(它是一个 Java 正则表达式)- 官网示例,如果请求包含
red
其值与正则gree.
表达式匹配的查询参数,则前面的路由匹配,因此green
并且greet
会匹配。
spring: cloud: gateway: routes: - id: query_route uri: https://example.org predicates: - Query=red, gree.
配置文件
server:
port: 8088
spring:
application:
name: cloud-gateway
cloud:
gateway:
routes:
# 路由的ID,没有固定规则但要求唯一,建议配合服务名。可能是一个list集合
- id: payment_routh
# 匹配后提供服务的路由地址
# uri: http://localhost:8001
uri: lb://CLOUD-PAYMENT-SERVICE
# 断言,路径相匹配的进行路由。可能是一个list集合
predicates:
- Path=/payment/get/**
# 路由的ID,没有固定规则但要求唯一,建议配合服务名.可能是一个list集合
- id: payment_routh02
# 匹配后提供服务的路由地址
# uri: http://localhost:8001
uri: lb://CLOUD-PAYMENT-SERVICE
# 断言,路径相匹配的进行路由。可能是一个list集合
predicates:
# Path Route Predicate
- Path=/payment/lb/**
# After Route Predicate,在时间之后处理请求
- After=2022-04-19T20:20:44.229+08:00[Asia/Shanghai]
# Before Route Predicate,在时间之前会处理请求
- Before=2022-04-20T20:20:44.229+08:00[Asia/Shanghai]
# Between Route Predicate,在这两事件之间会处理请求
- Between=2022-04-19T20:20:44.229+08:00[Asia/Shanghai],2022-04-20T20:20:44.229+08:00[Asia/Shanghai]
# Cookie Route Predicate,请求要有cookie,名字和值要跟下面一样
- Cookie=username,abc
# Header Route Predicate,请求头要有X-Request-Id,值要是整数
# - Header=X-Request-Id,\d+
# Host Route Predicate,接收请求后缀为haha.com 的请求域名访问
- Host=**.haha.com
# Method Route Predicate,求请求方式是get
- Method=Get,Post
# Query Route Predicate,请求中有参数username,且值是整数,才路由
- Query=username,\d+
eureka:
instance:
hostname: cloud-gateway-service
client: #服务提供者provider注册进eureka服务列表内
service-url:
register-with-eureka: true
fetch-registry: true
defaultZone: http://eureka7001.com:7001/eureka
可以使用postman测试或者使用cmd命令窗口的curl命令测试
返回结果中有中文乱码自己百度我没乱码