1、时间相关
根据日期匹配请求的响应(当前日期2023/7/14)
1.1、AfterRoutePredicateFactory
匹配在指定日期之后发生的请求。
设置After日期内容为当前日期之后:
设置After日期内容为当前日期之前:
1.2、BeforeRoutePredicateFactory
匹配在指定日期之前发生的请求。
设置Before日期内容为当前日期之后:
设置Before日期内容为当前日期之前:
1.3、BetweenRoutePredicateFactory
匹配在指定日期区间中发生的请求。
当前日期在指定日期区间中:
当前日期不在指定日期区间中:
2、Cookie
2.1 CookieRoutePredicateFactory
匹配具有给定名称且其值与正则表达式匹配的Cookie。
测试:
结果:
携带chocolate且内容匹配:
不携带chocolate或内容不匹配:
3、Header相关
3.1、HeaderRoutePredicateFactory
Header路由谓词工厂接受两个参数,即header和regexp (这是一个Java正则表达式)。此谓词与具有给定名称且其值与正则表达式匹配的标头匹配。
测试:
结果:
携带header且内容匹配:
不携带header或内容不匹配:
3.2、HostRoutePredicateFactory
Host路由谓词工厂接受一个参数:主机名模式列表。模式是一种蚂蚁风格的模式,与。作为分隔符。此谓词与匹配模式的Host标头匹配。
测试:
结果:
设置:
192.168.200.58
192.168.73.1
不设置:
192.168.200.58
192.168.73.1
4、请求相关
4.1 MethodRoutePredicateFactory
MethodRoutePredicateFactory接受一个methods参数,它是一个或多个参数: 要匹配的HTTP方法。
测试:
结果:
设置:
GET:
POST:
不设置:
GET:
POST:
4.2 PathRoutePredicateFactory
Path Route Predicate Factory接受两个参数:一个Spring PathMatcher模式列表和一个可选的名为matchTrailingSlash的标志(默认为真)。
测试:
结果:
不加则任意字符都可以,即/**:
4.3 QueryRoutePredicateFactory
Query路由谓词工厂接受两个参数:一个必需的param和一个可选的regexp (这是一个Java正则表达式)。
测试:
未加参数或不匹配:
加参数且匹配:
4.4 RemoateRoutePredicateFactory
RemoteAddr路由谓词工厂接受一个源列表(最小大小为1),这些源是CIDR符号 (IPV4或IPv6)字符串,例如192.168.0.1/16(其中192.168.0.1是一个P地址,16是一个子网掩码)。
测试:
符合:
不符合:
补充:Weight Route Predicate Factory
其中:producer-service中包含2个服务(8082,9090)(使用lb令8082与9090启用负载均衡)
当路由权重配置好后,(consumer-service与producer-service两个服务中均有一个/hello的路由)
producer-service
consumer-service
我们向127.0.0.1:10010/hello(127.0.0.1:10010为当前gateway所在地址)发出500个请求
结果如下:
producer-service---->8082
producer-service---->9090
consumer-service
我们可以发现consumer-service与producer-service请求数之比基本上是3:2
而且从9090与8082请求数之比基本上是1:1可以也看出lb的功效
当我们未开启权重的时候,或依照路由配置的先后顺序进行分配流量。比如
此时流量分配会优先给producer。在此我们访问1000次查看效果
producer-service---->8082
producer-service---->9090
consumer-service
我们可以发现这1000次请求都分配给了producer-service。
然后我们再将顺序调换:
得到结果:
同时如果我们在此时将consumer-service服务关闭,此时也不会访问producer-service,由此我们可以推断,当我们没有分配权重的时候,网关会默认全部发送给第一个,第二个不会发送,即网关默认第一个权重是1,其余的全是0。
测试效果: