一.Spring Cloud Gateway的工作原理
我们今天讲的谓词位于Gateway Handler Mapping这一层。
二.路由谓词工厂
1.AfterRoutePredicateFactory
谓词工厂匹配指定时间之后的请求,示例:
application.yml
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://example.org
predicates:
- After=2017-01-20T17:42:47.789-07:00[America/Denver]
路由2017年1月20日17点42份47秒(美国丹佛)之后的请求。
2.BeforeRoutePredicateFactory
谓词工厂匹配指定时间之前的请求,示例:
application.yml
spring:
cloud:
gateway:
routes:
- id: before_route
uri: https://example.org
predicates:
- Before=2017-01-20T17:42:47.789-07:00[America/Denver]
路由2017年1月20日17点42份47秒(美国丹佛)之前的请求。
3.BetweenRoutePredicateFactory
谓词工厂匹配指定时间段的请求,示例:
application.yml
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]
路由2017年1月20日17点42份47秒(美国丹佛)到2017年1月21日17点42份47秒之间的请求。
4.CookieRoutePredicateFactory
谓词工厂匹配Cookie中含有某个属性及其对应值的请求,示例:
application.yml
spring:
cloud:
gateway:
routes:
- id: cookie_route
uri: https://example.org
predicates:
- Cookie=chocolate, ch.p
路由请求中Cookie含有chocolate属性,其值正则匹配ch.p的请求。
5.HeaderRoutePredicateFactory
谓词工厂匹配Header中含有某个属性及其对应值的请求,示例:
application.yml
spring:
cloud:
gateway:
routes:
- id: header_route
uri: https://example.org
predicates:
- Header=X-Request-Id, \d+
路由请求中Header含有X-Request-Id属性,其值正则匹配\d+。
6.HostRoutePredicateFactory
谓词工厂匹配主机名模式
application.yml
spring:
cloud:
gateway:
routes:
- id: host_route
uri: https://example.org
predicates:
- Host=**.somehost.org,**.anotherhost.org
路由Header中含有host属性且值匹配**.somehost.org,**.anotherhost.org的请求。
7.MethodRoutePredicateFactory
谓词工厂根据请求方式进行请求匹配,示例:
application.yml
spring:
cloud:
gateway:
routes:
- id: method_route
uri: https://example.org
predicates:
- Method=GET,POST
路由请求方式为GET,POST的请求。
8.PathRoutePredicateFactory
谓词工厂根据路径正则匹配请求路径,示例:
application.yml
spring:
cloud:
gateway:
routes:
- id: host_route
uri: https://example.org
predicates:
- Path=/red/{segment},/blue/{segment}
路由请求路径中可以正则匹配/red/{segment},/blue/{segment}的的请求。
9.QueryRoutePredicateFactory
谓词工厂根据请求参数进行匹配请求,示例:
application.yml
spring:
cloud:
gateway:
routes:
- id: query_route
uri: https://example.org
predicates:
- Query=green
路由请求参数中含有green参数的请求。
10.RemoteAddrRoutePredicateFactory
谓词工厂根据远程请求地址进行匹配请求,示例:
application.yml
spring:
cloud:
gateway:
routes:
- id: remoteaddr_route
uri: https://example.org
predicates:
- RemoteAddr=192.168.1.1/24
路由192.168.1.0~192.168.1.255的请求。
11.WeightRoutePredicateFactory
谓词工厂基于路由权重来进行路由请求(一般配合其他谓词使用),示例:
application.yml
spring:
cloud:
gateway:
routes:
- id: weight_high
uri: https://weighthigh.org
predicates:
- Weight=group1, 8
- id: weight_low
uri: https://weightlow.org
predicates:
- Weight=group1, 2
如上weight_high 权重为 8, weight_low 权重为2。 对于10个访问请求来说,将会有8个路由到 weight_high ,2个路由到 weight_low。
来源:CSDN
作者:Scorpio_Capricorn
链接:https://blog.csdn.net/Scorpio_Capricorn/article/details/104170326