Spring Cloud Gateway RoutePredicateFactory

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。

测试效果:

猜你喜欢

转载自blog.csdn.net/Deikey/article/details/131728346