Gateway 路由谓词工厂

Spring Cloud Gateway将路由匹配作为Spring WebFlux HandlerMapping基础架构的一部分,Spring Cloud Gateway包括许多内置的路由谓词工厂,所有这些谓词都与HTTP请求的不同属性匹配,可以将多个路由谓词工厂结合使用。

总共有11个路由谓词工厂:

  1. The After Route Predicate Factory
  2. The Before Route Predicate Factory
  3. The Between Route Predicate Factory
  4. The Cookie Route Predicate Factory
  5. The Header Route Predicate Factory
  6. The Host Route Predicate Factory
  7. The Method Route Predicate Factory
  8. The Path Route Predicate Factory
  9. The Query Route Predicate Factory
  10. The RemoteAddr Route Predicate Factory
  11. The Weight Route Predicate Factory

时间通过获取:System.out.println(ZonedDateTime.now());

After路由谓词工厂

After route谓词工厂采用一个参数,即datetime(这是一个Java ZonedDateTime),该谓词匹配在指定日期时间之后发生的请求,以下示例配置了路由后谓词:
Gateway 路由谓词工厂
这条路由符合2017年1月20日17:42:47时间([America/Denver])之后的任何请求;

Before路由谓词工厂

Before路由谓词工厂采用一个参数,即datetime(这是一个Java ZonedDateTime),该谓词匹配在指定日期时间之前发生的请求,下面的示例配置路由之前谓词:
Gateway 路由谓词工厂
这条路由符合2017年1月20日17:42:47时间([America/Denver])之前的任何请求;

Between路由谓词工厂

路由谓词之间的工厂使用两个参数datetime1和datetime2,它们是java ZonedDateTime对象,该谓词匹配在datetime1之后和datetime2之前发生的请求,datetime2参数必须在datetime1之后,以下示例配置了路由之间的谓词:
Gateway 路由谓词工厂
该路线与2017年1月20日山区时间(丹佛)之后和2017年1月21日17:42山区时间(丹佛)之前的任何请求相匹配,这对于维护时段可能很有用;

Cookie 路由谓词工厂

Cookie路由谓词工厂采用两个参数,即cookie名称和一个regexp(这是Java正则表达式),该谓词匹配具有给定名称且其值与正则表达式匹配的cookie,以下示例配置Cookie路由谓词工厂:

Gateway 路由谓词工厂

此路由匹配具有名为Chocolate的cookie的请求,该cookie的值与ch.p正则表达式匹配;

举例:curl http://192.168.0.104/index --cookie chocolate=123456

Header 路由谓词工厂

header 路由谓词工厂使用两个参数,header 名称和一个regexp(这是Java正则表达式),该谓词与具有给定名称的header 匹配,该header 的值与正则表达式匹配,以下示例配置标头路由谓词:

Gateway 路由谓词工厂
如果请求具有名为X-Request-Id的标头,且其值与\ d +正则表达式匹配(即,其值为一个或多个数字),则此路由匹配;

举例:curl http://192.168.0.104/index --header “X-Request-Id:19228”

Host 路由谓词工厂

host路由谓词工厂使用一个参数:主机名模式列表,以下示例配置主机路由谓词:
Gateway 路由谓词工厂
还支持URI模板变量(例如{sub} .myhost.org),如果请求的主机标头的值为www.somehost.org或beta.somehost.org或www.anotherhost.org,则此路由匹配(按照图中,并非上面举例);

Method 路由谓词工厂

方法路由谓词工厂使用方法参数,该参数是一个或多个参数:要匹配的HTTP方法,以下示例配置方法route谓词:

Gateway 路由谓词工厂
如果请求方法是GET或POST,则此路由匹配;

Path路由谓词工厂

路径路由谓词工厂使用两个参数:Spring PathMatcher模式列表和一个称为matchOptionalTrailingSeparator的可选标志,以下示例配置路径路由谓词:

Gateway 路由谓词工厂

如果请求路径为例如/red/1或/red/blue或/blue/green,则此路由匹配;

Query路由谓词工厂

查询路由谓词工厂采用两个参数:必需的参数和可选的regexp(这是Java正则表达式),以下示例配置查询路由谓词:

Gateway 路由谓词工厂

如果请求包含green查询参数,则前面的路由匹配;

RemoteAddr 路由谓词工厂

RemoteAddr路由谓词工厂使用源列表(最小大小为1),这些源是标记(IPv4或IPv6)字符串,例如192.168.0.1/16(其中192.168.0.1是IP地址,而16是子网掩码)),下面的示例配置RemoteAddr路由谓词:

Gateway 路由谓词工厂

如果请求的远程地址是例如192.168.1.10,则此路由匹配;

Weight 路由谓词工厂

权重路由谓词工厂采用两个参数:group和weight(一个int),权重是按组计算的,以下示例配置权重路由谓词:
Gateway 路由谓词工厂

这条路由会将约80%的流量转发至weighthigh.org,并将约20%的流量转发至weightlow.org;

上一篇:C# 查询数据库子表的值


下一篇:[paper reading][IJCAI 2020] Turning 30: New Ideas in Inductive Logic Programming