本文来详细说下Gateway路由谓词工厂
常用术语
常用术语说明
- 路由:网关的基本模块,它由ID、目标URI、谓词集合和过滤器集合定义。如果聚合谓词为true,则匹配路由。
- 谓词: 匹配Http请求参数的规则
- 过滤器:对下游的服务器之前和之后实现处理,使用责任链模式。
Predicate(断言,谓词)用于进行条件判断,只有断言都返回真,才会真正的执行路由。断言就是说:在什么条件下才能进行路由转发。
它是如何工作的
下图提供了 Spring Cloud Gateway 如何工作的高级概述:
在没有端口的路由中定义的 URI 分别获得 HTTP 和 HTTPS URI 的默认端口值 80 和 443。
客户端向 Spring Cloud Gateway 发出请求。如果网关处理程序映射确定请求与路由匹配,则将其发送到网关 Web 处理程序。此处理程序通过特定于请求的过滤器链运行请求。过滤器用虚线划分的原因是过滤器可以在发送代理请求之前和之后运行逻辑。执行所有“预”过滤器逻辑。然后发出代理请求。发出代理请求后,将运行“发布”过滤器逻辑。
配置路由谓词工厂
有两种配置谓词和过滤器的方法:快捷方式和完全扩展的参数。下面的大多数示例都使用快捷方式。名称和参数名称将code在每个部分的第一句或第二句中列出。参数通常按快捷方式配置所需的顺序列出。
快捷方式配置
快捷方式配置由过滤器名称识别,后跟等号 ( =),后跟以逗号 ( ,) 分隔的参数值。
应用程序.yml
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://example.org
predicates:
- Cookie=mycookie,mycookievalue
前面的示例Cookie使用两个参数定义了路由谓词工厂,cookie 名称mycookie和要匹配的值mycookievalue。
完全扩展的参数
完全扩展的参数看起来更像是带有名称/值对的标准 yaml 配置。通常,会有一把name钥匙和一把args钥匙。键是用于配置谓词或过滤器的args键值对映射。
应用程序.yml
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://example.org
predicates:
- name: Cookie
args:
name: mycookie
regexp: mycookievalue
Cookie这是上面显示的谓词的快捷配置的完整配置。
路由谓词工厂
路由谓词工厂:Spring Cloud Gateway 将路由匹配为 Spring WebFluxHandlerMapping基础架构的一部分。Spring Cloud Gateway 包含许多内置的路由谓词工厂。所有这些谓词都匹配 HTTP 请求的不同属性。您可以将多个路由谓词工厂与逻辑and语句结合起来。
通俗描述:请求匹配机制(触发路由条件)即符合Predicate的条件,就使用该路由的配置,否则对请求不做任何处理。
本文小结
本文介绍了Gateway路由谓词工厂相关的概念,下文介绍gateway路由谓词实例。