GateWay网关谓词用法|学习笔记

简介: 快速学习GateWay网关谓词用法

开发者学堂课程【精通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

uri:https://example.org

predicates:

-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

uri:https://example.org

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

uri:https://example.org

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

uri:https://weightlow.org

predicates:

-Weight=group1,2

这条路线会将大约80%的流量转发到 weighthigh.org,将大约20%的流量转发到weightlow.org。

相关文章
|
19天前
|
算法 NoSQL API
SpringCloud&Gateway网关限流
SpringCloud&Gateway网关限流
63 7
|
19天前
|
缓存
SpringCloud Gateway 网关的请求体body的读取和修改
SpringCloud Gateway 框架中,为了处理请求体body,实现多次读取与修改,创建了一个名为`RequestParamGlobalFilter`的全局过滤器。这个过滤器使用`@Component`和`@Slf4j`注解,实现了`GlobalFilter`和`Ordered`接口,设置最高优先级以首先读取body。它通过缓存请求体并创建装饰过的`ServerHttpRequest`来实现body的动态获取。
111 4
|
19天前
|
负载均衡 应用服务中间件 API
Nginx、Kong、Apisix、Gateway网关比较
Nginx、Kong、Apisix、Gateway网关比较
210 1
Nginx、Kong、Apisix、Gateway网关比较
|
19天前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
144 0
|
12天前
|
设计模式 缓存 Java
【设计模式】JAVA Design Patterns——API Gateway(API网关模式)
【设计模式】JAVA Design Patterns——API Gateway(API网关模式)
|
19天前
|
SpringCloudAlibaba 负载均衡 Java
【微服务 SpringCloudAlibaba】实用篇 · Gateway服务网关
【微服务 SpringCloudAlibaba】实用篇 · Gateway服务网关
39 0
|
19天前
|
前端开发 Java 应用服务中间件
Springboot解决跨域问题方案总结(包括Nginx,Gateway网关等)
Springboot解决跨域问题方案总结(包括Nginx,Gateway网关等)
|
19天前
|
Java Maven 微服务
使用Spring Cloud Gateway构建微服务网关
以上简要示例介绍了使用Spring Cloud Gateway构建微服务网关的基本步骤,包括添加依赖、配置路由、编写过滤器等。通过配置和自定义过滤器,可以实现请求转发、过滤、鉴权等功能。
54 5
|
19天前
|
Java 网络架构 微服务
SpringCloud GateWay网关-学习笔记
SpringCloud GateWay网关-学习笔记
36 0
|
19天前
|
运维 网络协议 安全
长连接网关技术专题(十):百度基于Go的千万级统一长连接服务架构实践
本文将介绍百度基于golang实现的统一长连接服务,从统一长连接功能实现和性能优化等角度,描述了其在设计、开发和维护过程中面临的问题和挑战,并重点介绍了解决相关问题和挑战的方案和实践经验。
130 1