开发者学堂课程【精通Spring Cloud Alibaba:GateWay网关谓词用法】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/634/detail/10126
GateWay网关谓词用法
路由谓词工厂
Spring Cloud Gateway 将路由作为 Spring WebFlux HandlerMapping 基础架构的一部分进行匹配。
Spring Cloud Gateway 包括许多内置的路由谓词工厂。所有这些谓词都与 HTTP 请求的不同属性匹配。
您可以将多个路由调词工厂与逻辑 and 语句结合使用。
1.后路线谓词工厂
所述 After 路线谓词工厂有一个参数,一个 datetime (其是 Java ZonedDateTime )。
该谓词匹配在指定日期时间之后发生的请求。下面的示例配置路由后谓词:
例子1. application.yml
spring:
cloud;
gateway:
routes:
- id: after_route
uri:https://example.org
predicates:
-After=2017-01-20T17;42:47.789-07;06[America/Denver]
这条路线符合2017年1月20日17:42山区时间(丹佛)之后的任何请求。
2.之前路线谓词工厂
所述 Before 路线谓词工厂有一个参数,一个 datetime (其是 Java ZonedDateTime )。该谓词匹配在指定之前发生的请求 datetime,以下示例配置了路由前谓词:
例子2. application.yml
spring:
cloud:
gateway:
routes:
- id: before route
uri:https://example.org
predicates:
-Before=2817-01-28T17:42:47.789-87:6e[America/Denver]
这条路线符合2017年1月20日17:42山区时间(丹佛)之前的任何要求。
3.路由谓词间工厂
该 Between 路线谓词工厂有两个参数,datetimel 并且 datetime2 这是 Java ZonedDateTime 对象,该谓词匹配在之后 datetime1 和之前发生的请求datetime2。
该 datetime2 参数必须是后 datetime1。以下示例配置了路由之间的谓词:
例子3. application.yml
spring:
cloud:
gateway:
noutes;
- id: between_route
uri:https://example.org
predicates:
-Between=2017-01-20T17:42:47,789-87:08[America/Denver],2017-01-21T17:42:47.789-87:eelAmerica/Denve
该路线与2017年1月20日山区时间(丹佛)之后和2017年1月21日17:42山区时间(丹佛)之后的任何请求相匹配。这对于维护时段可能很有用。
4.Cookie 路线谓词工厂
所述 cookie 路线谓词工厂采用两个参数,该 cookie name 和 regexp (其是Java正则表达式)。该谓词匹配具有给定名称且其值与正则表达式匹配的 cookie 。以下示例配置 Cookie 路由谓词工厂:
例子4. application.yml
spring:
cloud:
gateway:
routes:
- id:cookie_route
uri:https://example.org
predicates:
-Cookie-chocolate, ch.p
此路由匹配具有名称为 chocolate 与 ch.p 正则表达式匹配的 cookie 的请求。
5.标头路由谓词工厂
所述 Header 路线谓词工厂采用两个参数,报头 name 和-一个 regexp(其是 Java 正则表达式)。该谓词与具有给定名称且其值与正则表达式匹配的标头匹配。以下示例配置标头路由谓词:
例子5. application.yml
spring:
cloud:
gateway:
noutes:
- id:header_route
uri:https://example.org
predicates:
- Header=X-Request-Id,\d+
如果请求具有名为x-Request-Id其值与\d+正则表达式匹配的标头(即,其值为一个或多个数字),则此路由匹配。
6.主机路由谓词工厂
该 Host 路线谓词工厂需要一个参数:主机名的列表 patterns。该模式是带有.分隔符的 Ant 样式的模式。谓词与 Host 匹配模式的头匹配。以下示例配置主机路由谓词:
例子6. application.yml
spring:
cloud:
gateway:
routes:
-id: host_route
pre
dicates:
-Host=**.somehost.org,**.anotherhost.org
{sub}.myhost.org还支持URI模板变量。
如果请求具有这种路由匹配Host用的头值 Ww.somehost.org或www.anotherhost.org。
该谓词提取 URI 模板变量(例如 sub ,在前面的示例中定义的)作为名称和值的映射,并 ServerMebExchange.getAttributes ()使用中定义的键将其放在中 ServerWebExchangeUtils.URI_TENPLATE_VARIABLES_ATTRIBUTE,这些值可供工厂使用 GatewayFilter
7.方法路线谓词工
所述 Method 路线谓词广需要 methods 的参数,它是一个或多个参数:HTTP 方法来匹配。以下示例配置方法路由谓词:
例子7. application.yml
spring:
cloud:
gateway;
routes;
-id:method_route
uri:https://example.org
predicates:
-Method=GET,POST
8.路径路线谓词工厂
该Path 路线谓词厂有两个参数:春天的列表 PathMatcher patterns 和一个可选的标志叫 matchoptionalTrailingSeparator 。以下示例配置路径路由谓词:
例子8. application.yml
spring:
cloud:
gateway:
routes:
- id: host route
predicates:
-Path=/red/(segment),/blue/(segment)
这条路线,如果请求路径是,例如匹配/red/1或/red/blue 或/blue/green。
该谓词提取 URI 模板变量(例如 segment,在前面的示例中定义的)作为名称和值的映射,并 ServerwebExchange.getattributes()用中定义的键将其放在中 ServerwebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE,这些值可供工厂使用 GatewayFilter
可以使用实用程序方法(称为 get )来简化对这些变量的访问。下面的示例演示如何使用该 get 方法:
MapuriVariables= ServerWebExchangeUtils.getPathPredicateVariables(exchange);
String segment = uriVariables.get("segment");
9.查询路由谓词工厂
所述 Query 路线谓词工厂采用两个参数:所要求的 param 和可选的 regexp (其是Java 正则表达式)。以下示例配置查询路由谓词:
例子9. application.yml
spring:
cloud:
gateway:
routes:
-id: query route
uri:https://example.org
predicates:
-Query-green
如果请求包含 green 查询参数,则前面的路由匹配。
application.yml
spring:
cloud:
gateway:
routes:
- id: query_route
predicates:
-Query=red, gree.
如果请求包含一个前述路线匹配red,其值相匹配的查询参数green的regexp,所以green和greet将匹配。
10.RemoteAddr路由谓词工厂
所述 RemoteAddr路线谓词工厂需要的列表(分钟尺寸1) sources ,其是 CIDR 的表示法( IPv4 或 IPV6 )的字符串,如192,168.0.1/16(其中192.168.0.1是一个 IP 地址和16一个子网掩码)。以下示例配置一个 RemoteAddr 路由调词:
例子10. application.yml
spring:
cloud:
gateway:
routes:
routes:
- id:remoteaddr_route
uri:https://example.org
predicates:
-RemoteAddr=192.168.1.1/24
如果请求的远程地址为,则此路由匹配192.168.1.10。
11.重量路线谓词工厂
该 Weight 路线谓词工厂有两个参数:group 和 weight(一个 int )。权重是按组计算的。以下示例配置权重路由谓词:
例子11.application.yml
spring:
cloud:
gateway:
routes:
-id:weight_high
uri:https://weighthigh.org
predicates:
-Weight=group1,8
-id:weight_low
predicates:
-Weight=group1,2
这条路线会将大约80%的流量转发到 weighthigh.org,将大约20%的流量转发到weightlow.org。