当前位置:   article > 正文

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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

上面用的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]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

什么意思???
简单一说就知道了,就是给我们的断言有多加了一个匹配规则,除了要满足访问路径是/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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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


3.Header 路由断言

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


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

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


4.Host 路由断言

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


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

这个路由规则匹配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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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


6.Query 查询路由断言

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


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

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


拓展

1.SpringCloud中的Gateway网关基础.

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/302158
推荐阅读
相关标签
  

闽ICP备14008679号