>>分享孙卫琴的Java技术专稿和著作 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 8503 个阅读者 刷新本主题
 * 贴子主题:  【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
  Java面向对象编程-->图形用户界面(上)
  JavaWeb开发-->JSP中使用JavaBean(Ⅰ)
  JSP与Hibernate开发-->映射一对多关联关系
  Java网络编程-->基于MVC和RMI的分布式应用
  精通Spring-->创建综合购物网站应用
  Vue3开发-->创建综合购物网站应用
  【Vue.js技术专题】插槽slot的基本用法
  【Vue.js技术专题】自定义指令范例:v-drag指令
  【Spring Cloud Alibaba专题】SkyWalking整合MySQL
  向小伙伴们推荐我所创作前后端编程书籍的学习顺序
  【持久化专题】为什么JPA和Hibernate的持久化方法都抛出运行...
  【Spring专题】Spring框架的数据验证机制
  视频:我的Java课堂总动员,带领小白们走马观花看Java江湖
  探讨IT技术作者的素养
  【持久化专题】用@MapsId注解映射派生主键
  【Java网络编程专题】用java.net.URL类访问HTTP服务器读取网...
  【Java网络编程专题】异步通道和异步运算结果
  IT技术书写作技巧分享:慎用概念和术语
  【Java基础编程专题】用内部类实现回调
  【Java基础编程专题】Java基本类型和引用类型的三个区别
  【Java基础编程专题】用static修饰符进行静态导入的作用和语...
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。