>>分享孙卫琴的Java技术专稿和著作 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 8502 个阅读者 刷新本主题
 * 贴子主题:  【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面向对象编程-->Java常用类(上)
  JavaWeb开发-->使用Session(Ⅱ)
  JSP与Hibernate开发-->数据库事务的并发问题的解决方案
  Java网络编程-->ServerSocket用法详解
  精通Spring-->组合(Composition)API
  Vue3开发-->CSS过渡和动画
  【Vue.js技术专题】路由管理器的基本用法
  【Java基础编程专题】浮点数的格式化以及运算精度
  【Spring专题】@ControllerAdvice注解的用法
  【Spring专题】@Query和@Modifying注解的增删改操作
  【持久化专题】用@MapsId注解映射派生主键
  【持久化专题】用@Formula注解映射派生属性
  【持久化专题】从JPA API中获得Hibernate API
  【持久化专题】@Enumerated注解映射枚举类型
  【持久化专题】Hibernate的配置文件
  【持久化专题】JPA API的基本用法
  【持久化专题】映射Bag包(值类型的集合)
  【持久化专题】EntityManager和Session的merge()方法详解
  【持久化专题】比较JPA的EntityManager接口与Hibernate的Ses...
  【JavaWeb专题】在Servlet中利用Apache开源类库实现文件上传
  【Java基础编程专题】Java继承的利弊和使用原则
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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