SpringCloud使用Gateway常用的断言(predicates)种类以及规则



基础提要:SpringCloud中的Gateway网关.

这里是我们9527网关服务的yml配置文件,可以看到是动态路由,根据断言(predicates)匹配到/testGateWay01路径的请求后,再通过服务名SPRINGCLOUD-PROVIDER-DEPT去服务注册中心负载均衡地获取到服务并访问!

spring:
  application:
    name: cloud-gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true       #启动动态路由,也就是说网关现在会根据服务名去找到对应的服务
      routes:
        - id: provider_routh
          uri: lb://SPRINGCLOUD-PROVIDER-DEPT   #目标微服务名!而且是以负载均衡方式去获取!
          predicates:    						#断言
            - Path=/testGateWay01

        - id: provider_routh2
          uri: lb://SPRINGCLOUD-PROVIDER-DEPT
          predicates:
            - Path=/testGateWay02

上面用的path 只是predicate 中的一个
有哪几种?
在这里插入图片描述
这里介绍一下

1.After、Before、Between 路由断言

先看配置文件!


      routes:
        - id: provider_routh
          uri: lb://SPRINGCLOUD-PROVIDER-DEPT   #目标微服务名!而且是以负载均衡方式去获取!
          predicates:    						#断言
            - Path=/testGateWay01
            - After=2021-07-04T19:16:43.338+08:00[Asia/Shanghai]

什么意思???
简单一说就知道了,就是给我们的断言有多加了一个匹配规则,除了要满足访问路径是/testGateWay01以外,还要满足当前请求的时间必须是在2021-07-04 19:16:43.338+08:00以后!也就是After某某时间以后,断言才会进行匹配!

Before、Between顾名思义也就明白了:在某某时间以前、在某两个时间之间
如果我们不在规定的时间窗口内访问,就会报错!

2.Cookie 路由断言

Cookie 断言有两个参数,一个cookie 名称和一个java 正则表达式,这个断言匹配给定的cookie 名和值正则匹配的请求。


      routes:
        - id: provider_routh
          uri: lb://SPRINGCLOUD-PROVIDER-DEPT   #目标微服务名!而且是以负载均衡方式去获取!
          predicates:    						#断言
            - Path=/testGateWay01
            - Cookie=username, ybz

白话文理解:就是一个键值对!请求的Cookie必须要有一个键值对username:ybz。满足我就给你访问,否则就给老子滚


3.Header 路由断言

Header断言有两个参数,一个参数名,一个正则。只有当有这个参数并且值匹配正则的时候才能执行下去。


      routes:
        - id: provider_routh
          uri: lb://SPRINGCLOUD-PROVIDER-DEPT   #目标微服务名!而且是以负载均衡方式去获取!
          predicates:    						#断言
            - Path=/testGateWay01
            - Header=X-Request-Id, \d+

这个路由规则匹配Header中包含X-Request-Id并且值为纯数字的请求。


4.Host 路由断言

Host 路由断言接受一个正则域名列表,正则是用英文句号分割的正则表达式。


      routes:
        - id: provider_routh
          uri: lb://SPRINGCLOUD-PROVIDER-DEPT   #目标微服务名!而且是以负载均衡方式去获取!
          predicates:    						#断言
            - Path=/testGateWay01
            - Host=**.ybz.com

这个路由规则匹配Header中必须包含**.ybz.com


5.Method 路由断言

Method路由断言匹配一个或多个Http请求方式(GET POST PUT DELETE HEAD).


      routes:
        - id: provider_routh
          uri: lb://SPRINGCLOUD-PROVIDER-DEPT   #目标微服务名!而且是以负载均衡方式去获取!
          predicates:    						#断言
            - Path=/testGateWay01
            - Method=GET,POST

这个路由匹配所有的GET POST请求。


6.Query 查询路由断言

Query路由断言有两个参数: 一个必传参数 和一个可选的正则表达式。


      routes:
        - id: provider_routh
          uri: lb://SPRINGCLOUD-PROVIDER-DEPT   #目标微服务名!而且是以负载均衡方式去获取!
          predicates:    						#断言
            - Path=/testGateWay01
            - Query=green
            - Query=red, gree.

1.如果请求中包含green的参数,则匹配成功。
2.如果一个请求中包含参数red并且值匹配·gree.·这个正则,那么路由匹配。比如:green和greet。


拓展

1.SpringCloud中的Gateway网关基础.

2.Gateway中的filter.
好了 基本已经讲完,欢迎大家评论区指出不足,一起学习进步!

大家看完了点个赞,码字不容易啊。。。

  • 12
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Cloud Gateway 提供了很多常用的过滤器,下面列举一些比较常用的过滤器及使用示例: 1. 添加请求头过滤器(AddRequestHeader Filter) 该过滤器可以在请求头中添加指定的键值对,示例: ``` spring: cloud: gateway: routes: - id: add_request_header_route uri: http://www.baidu.com predicates: - Path=/baidu/** filters: - AddRequestHeader=X-Request-Id, 123 ``` 上面的配置表示在请求转发到 `http://www.baidu.com` 的时候,会在请求头中添加一个键值对 `X-Request-Id: 123`。 2. 去重请求头过滤器(RemoveRequestHeader Filter) 该过滤器可以去掉指定的请求头,示例: ``` spring: cloud: gateway: routes: - id: remove_request_header_route uri: http://www.baidu.com predicates: - Path=/baidu/** filters: - RemoveRequestHeader=X-Request-Id ``` 上面的配置表示在请求转发到 `http://www.baidu.com` 的时候,会去掉请求头中的 `X-Request-Id`。 3. 重写路径过滤器(RewritePath Filter) 该过滤器可以重写请求路径,示例: ``` spring: cloud: gateway: routes: - id: rewrite_path_route uri: http://www.baidu.com predicates: - Path=/baidu/** filters: - RewritePath=/baidu/(?<segment>.*), /${segment} ``` 上面的配置表示在请求转发到 `http://www.baidu.com` 的时候,会将请求路径中的 `/baidu/` 去掉,例如请求 `/baidu/search` 会被重写为 `/search`。 4. 重试过滤器(Retry Filter) 该过滤器可以在请求失败的时候进行重试,示例: ``` spring: cloud: gateway: routes: - id: retry_route uri: http://www.baidu.com predicates: - Path=/baidu/** filters: - Retry=2, 5000, INTERNAL_SERVER_ERROR ``` 上面的配置表示当请求转发到 `http://www.baidu.com` 失败时,会进行最多 2 次重试,每次重试间隔 5000 毫秒,并且只有当返回状态码为 INTERNAL_SERVER_ERROR 时才会进行重试。 5. 限流过滤器(RequestRateLimiter Filter) 该过滤器可以对请求进行限流,示例: ``` spring: cloud: gateway: routes: - id: request_rate_limiter_route uri: http://www.baidu.com predicates: - Path=/baidu/** filters: - RequestRateLimiter=redis, #限流器类型 key-resolver=#{T(org.springframework.cloud.gateway.handler.predicate.SpELKeyResolver).resolve('request_remote_address')}, #限流器 key 算法 redis-rate-limiter.replenishRate=1, #令牌桶填充速率 redis-rate-limiter.burstCapacity=1 #令牌桶最大容量 ``` 上面的配置表示使用 Redis 实现限流,限制每个 IP 地址每秒只能请求一次。 以上是一些比较常用的 Spring Cloud Gateway 过滤器及使用示例,开发者可以根据自己的需求选择合适的过滤器来实现特定的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易柏州Innovation

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值