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。

相关文章
|
2月前
|
负载均衡 Java 应用服务中间件
Gateway服务网关
Gateway服务网关
75 1
Gateway服务网关
|
2月前
|
负载均衡 Java API
项目中用的网关Gateway及SpringCloud
Spring Cloud Gateway 是一个功能强大、灵活易用的API网关解决方案。通过配置路由、过滤器、熔断器和限流等功能,可以有效地管理和保护微服务。本文详细介绍了Spring Cloud Gateway的基本概念、配置方法和实际应用,希望能帮助开发者更好地理解和使用这一工具。通过合理使用Spring Cloud Gateway,可以显著提升微服务架构的健壮性和可维护性。
67 0
|
4月前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
217 5
|
5月前
|
Java API 微服务
服务网关Gateway
该博客文章详细介绍了Spring Cloud Gateway的使用方法和概念。文章首先阐述了API网关在微服务架构中的重要性,解释了客户端直接与微服务通信可能带来的问题。接着,文章通过具体的示例代码,展示了如何在Spring Cloud Gateway中添加依赖、编写路由规则,并对路由规则中的基本概念如Route、Predicate和Filter进行了详细解释。最后,文章还提供了路由规则的测试方法。
服务网关Gateway
|
6月前
|
JSON 前端开发 Java
SpringCloud怎么搭建GateWay网关&统一登录模块
本文来分享一下,最近我在自己的项目中实现的认证服务,目前比较简单,就是可以提供一个公共的服务,专门来处理登录请求,然后我还在API网关处实现了登录拦截的效果,因为在一个博客系统中,有一些地址是可以不登录的,比方说首页;也有一些是必须登录的,比如发布文章、评论等。所以,在网关处可以支持自定义一些不需要登录的地址,一些需要登录的地址,也可以在网关处进行校验,如果未登录,可以返回JSON格式的出参,前端可以进行相关处理,比如跳转到登录页面等。
173 4
|
5月前
|
安全 API
【Azure API 管理】APIM Self-Host Gateway 自建本地环境中的网关数量超过10个且它们的出口IP为同一个时出现的429错误
【Azure API 管理】APIM Self-Host Gateway 自建本地环境中的网关数量超过10个且它们的出口IP为同一个时出现的429错误
|
5月前
|
存储 容器
【Azure 事件中心】为应用程序网关(Application Gateway with WAF) 配置诊断日志,发送到事件中心
【Azure 事件中心】为应用程序网关(Application Gateway with WAF) 配置诊断日志,发送到事件中心
|
5月前
|
负载均衡 Java 应用服务中间件
Gateway服务网关
本节针对微服务中另一重要组件:网关 进行了实战性演练,网关作为分布式架构中的重要中间件,不仅承担着路由分发(重点关注Path规则配置),同时可根据自身负载均衡策略,对多个注册服务实例进行均衡调用。本节我们借助GateWay实现的网关只是技术实现的方案之一,后续大家可能会接触像:Zuul、Kong等,其实现细节或有差异,但整体目标是一致的。
|
6月前
|
Kubernetes 监控 Java
有了k8s还需要gateway网关,nacos配置中心吗
在Kubernetes环境中,服务网关(如Spring Cloud Gateway)和Nacos配置中心补充了k8s的不足。Nacos提供灵活服务路由和动态配置更新,超越k8s基础服务发现。它还支持更复杂的配置管理和实时推送,以及环境隔离和版本控制。作为服务注册中心,Nacos增强k8s服务治理能力,保持技术一致性,并提供额外的安全层及监控功能。
371 0
|
6月前
|
网络协议 应用服务中间件 网络安全
[已解决]504 Gateway Time-out 网关超时
[已解决]504 Gateway Time-out 网关超时
291 0

热门文章

最新文章