|
本文参考孙卫琴,杜聚宾所创作的<<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是否与给定的路径模式匹配。示例代码如下:
(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
|
|