Spring Cloud Gateway谓词

为君一笑 提交于 2020-02-06 03:10:11

一.Spring Cloud Gateway的工作原理

Spring Cloud网关图

我们今天讲的谓词位于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。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!