>>分享孙卫琴的Java技术专稿和著作 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 8404 个阅读者 刷新本主题
 * 贴子主题:  【Spring Cloud Alibaba专题】GateWay的内置断言工厂 回复文章 点赞(0)  收藏  
作者:sunweiqin    发表时间:2022-08-25 11:48:44     消息  查看  搜索  好友  邮件  复制  引用

本文参考孙卫琴,杜聚宾所创作的<<Spring Cloud Alibaba微服务开发宝典>>一书,即将出版

GateWay提供的内置断言工厂主要包括以下几种。
(1)基于日期时间类型的断言工厂
此类型的断言根据日期时间做判断,主要有三个:
  • AfterRoutePredicateFactory: 接收一个日期时间参数。判断请求的日期时间是否晚于指定的参数值。
  • BeforeRoutePredicateFactory: 接收一个日期时间参数。判断请求的日期是否早于指定的参数值。
  • BetweenRoutePredicateFactory: 接收两个日期时间参数。判断请求的日期时间是否在指定的时间段内。
示例代码如下:

  #请求的时间是否在指定时间之后
  - After=2022-07-12T17:23:34.789+08:00[Asia/Shanghai]  

  #请求的时间是否在指定时间之前
  - Before=2022-07-15T17:23:34.789+08:00[Asia/Shanghai]

  #请求的时间是否在指定时间段之内
  - Between=2022-07-12T17:23:34.789+08:00[Asia/Shanghai],
              2022-07-12T17:23:34.789+08:00[Asia/Shanghai],

(2)基于远程地址的断言工厂:RemoteAddrRoutePredicateFactory
接收一个表示IP地址段的参数。判断发出请求的主机地址是否在指定的地址段内。示例代码如下:

- RemoteAddr=192.168.18.1/24

(3)基于Cookie的断言工厂:CookieRoutePredicateFactory
接收两个参数:Cookie 名字和正则表达式。 判断请求中是否具有给定名字的Cookie,并且该Cookie的值是否与给定的正则表达式匹配。示例代码如下:

#判断是否有名字为username的Cookie,并且Cookie值是否为小写字母
- Cookie=username,+  

(4)基于HTTP请求头的断言工厂:HeaderRoutePredicateFactory
接收两个参数:HTTP请求头中一个项的名字和正则表达式。判断HTTP请求头中是否具有给定名字的项,并且该项的值是否与给定的正则表达式匹配。示例代码如下:

#判断请求头中是否具有名字为X-Request-Id的项,并且该项的值为数字
- Header=X-Request-Id, \d+

(5)基于远程主机的断言工厂:HostRoutePredicateFactory
接收一个参数,表示主机名字的匹配模式。判断发出请求的主机的名字是否与给定的名字模式匹配。示例代码如下:

- Host=**.javathinker.net

(6)基于HTTP请求方式的断言工厂:MethodRoutePredicateFactory
接收一个参数,表示HTTP请求方式。判断请求方式是否为给定值。HTTP请求方式包括GET、POST、PUT和DELETE等。示例代码如下:

- Method=GET   #判断请求方式是否为GET

(7)基于Path请求路径的断言工厂:PathRoutePredicateFactory
接收一个参数,表示路径的匹配模式。判断请求的URI是否与给定的路径模式匹配。示例代码如下:

- Path=/enter/**

(8)基于Query请求参数的断言工厂:QueryRoutePredicateFactory
接收两个参数:请求参数名字和正则表达式。判断请求是否具有给定名字的请求参数,并且该请求参数的值是否与给定的正则表达式匹配。示例代码如下:

#判断是否具有username请求参数,并且值是否为Tom
- Query=username,Tom

(9)基于路由权重的断言工厂:WeightRoutePredicateFactory
接收两个参数:组名和权重。对于同一个组内的路由按照权重进行转发。示例代码如下:

gateway:
  routes:
  - id: route1
    uri: lb://host1
    predicates:
      - Path=/product/**
      - Weight=product_group, 2  #20%的流量进入route1
  - id: route2
    uri: lb://host2
    predicates:
      #route1和route2的匹配路径一致,组一致,权重不同
      - Path=/product/**
      - Weight= product_group, 8  #80%的流量进入route2

以上代码配置了两个路由:route1和route2,它们的Path匹配路径相同,都是/product/**,组都是product_group,但是权重不一样,分别是2和8。因此,对于路径和/product/**匹配的请求,20%的请求流量进入route1,80%的请求流量进入route2。



程序猿的技术大观园:www.javathinker.net
网站系统异常


系统异常信息
Request URL: http://www.javathinker.net/WEB-INF/lybbs/jsp/topic.jsp?postID=4215&pages=4

java.lang.NullPointerException

如果你不知道错误发生的原因,请把上面完整的信息提交给本站管理人员