2021年SpringCloudGateway中⽂⽂档详细解析(1-6章)
(3.0.2版)
⽬录
前⾔
基于3.0.2版本的翻译,加上个⼈理解进⾏总结,如若有误,欢迎指正。
持续更新中,觉得有⽤的点个赞吧....
Gateway是什么
Gateway是⼀个构建于, Spring 5(), and 的Spring⽣态系统之上的⽹关,旨在提共⼀个简单有效的⽅式路由接⼝,并提供跨领域的关注点,⽐如安全,监控,恢复能⼒。
能够使⽤⽹关去进⾏鉴权,⽇志记录等。
特征
1. 基于springframework5、projectreactor和springboot
2.0构建
2. 能够匹配任何请求属性上的路由。
3. 特定于路由的断⾔(Predicates )和过滤器(filters )
4. 集成熔断
5. 集成Spring Cloud DiscoveryClient
6. 易于编写断⾔(Predicates )和过滤器(filters )
7. 请求速率限制
8. 路径重写
1.如何包含Spring Cloud Gateway
在pom⽂件中引⼊如下依赖
springboot中文<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
Spring Cloud Gateway需要SpringBoot和SpringWebFlux提供的Netty作为运⾏时的容器。它不能在传统的Servlet容器中⼯作,也不能在构建为war。
2.关键词
Route:⽹关的基本构建模块,由⼀个id,⼀个⽬标url,⼀个断⾔器(Predicates )集合和过滤器(filters)集合组成,如果所有的断⾔器都是true,则匹配路由。
Predicate:  Java8的函数接⼝。输⼊类型是 .允许您匹配来⾃HTTP请求的任何内容,例如请求头或参数
Filter:被特定⼯⼚构建的GatewayFilter实例。在这⾥,您可以在发送请求之前或之后修改请求和响应。
3.⼯作原理
原理图
原理
如果客户端向⽹关发起⼀个请求,⽹关处理器正确映射请求到对应的路由,就会把请求发送给⽹关web,这个会使⽤这个请求对应的过滤器链去执⾏这个请求。
过滤器被虚线分割的原因是,过滤器可以在代理请求发送之前和之后运⾏逻辑。执⾏所有“预”过滤器逻辑。然后发出代理请求。在发出代理请求之后,运⾏“post”过滤器逻辑。
注意
如果在没有端⼝的路由中定义的uri分别为HTTP和HTTPS uri获取默认端⼝值80和443。
4.在配置⽂件中配置Predicate和的两种⽅式
简写
规则:配置由筛选器名称、等号(=)和⽤逗号(,)分隔的参数值识别。
spring:
cloud:
gateway:
routes:
- id: after_route
uri:
predicates:
- Cookie=mycookie,mycookievalue
## - Header=Connection,keep-alive
其中Cookie是断⾔⼯⼚的⼀种,其他可填写的断⾔可通过RoutePredicateFactory⽅式查可填写的key,例如关于请求头的HeaderRoutePredicateFactory,就可以写为Header=Connection,keep-alive。
完全展开
键值对书写,⼀般带有name和args两个key.args是⽤于配置Predicate或的键值对映射。
spring:
cloud:
gateway:
routes:
- id: after_route
uri:
predicates:
- name: Cookie
args:
name: mycookie
regexp: mycookievalue
5.Route Predicate Factories
匹配路由的断⾔⼯程,可根据各种条件进⾏路由的匹配。
AfterRoutePredicateFactory
作⽤:接收⼀个java ZonedDateTime类(格式为:2021-04-19T16:43:52.634+08:00[Asia/Shanghai])的时间参数。代表,在这个时间之后的请求才能正确匹配路由。
spring:
cloud:
gateway:
routes:
- id: after_route
uri:
predicates:
- After=2021-04-19T17:42:47.789-07:00[Asia/Shanghai]
BeforeRoutePredicateFactory
作⽤:接收⼀个java ZonedDateTime类(格式为:2021-04-19T16:43:52.634+08:00[Asia/Shanghai])的时间参数。代表在这个时间之前的请求才能正确匹配路由。
- id: after_route
uri:
predicates:
- Before=2021-04-19T17:42:47.789-07:00[Asia/Shanghai]
BetweenRoutePredicateFactory
作⽤:接收两个java ZonedDateTime类(格式为:2021-04-19T16:43:52.634+08:00[Asia/Shanghai])的时间参数。代表在第⼀时间之后,第⼆个时间之前的请求能被正确路由。
spring:
cloud:
gateway:
routes:
- id: between_route
uri:
predicates:
- Between=2021-04-19T00:00:00.000-00:00[America/Denver], 2021-04-20T00:00:00.000-00:00[America/Denver] CookieRoutePredicateFactory
作⽤:接收两个参数,分别为name和regexp (java的正则表达式),cookie中携带参数(name)满⾜正则表达式(regexp ),则被路由
spring:
cloud:
gateway:
routes:
- id: cookie_route
uri:
predicates:
- Cookie=chocolate, ch.p
HeaderRoutePredicateFactory
作⽤:接收两个参数,分别为name和regexp (java的正则表达式),cookie中携带参数(name)满⾜正则表达式(regexp ),则被路由
spring:
cloud:
gateway:
routes:
- id: header_route
uri:
predicates:
- Header=X-Request-Id, \d+
HostRoutePredicateFactory
作⽤:接收⼀个主机名称表达式集合的参数,该路径表达式⽀持风格。也⽀持模板变量(例如:{sub}.)
- id: host_route
uri:
predicates:
- Host=**.,**.
主机地址⽀持接收模板变量(例1.{sub}.,当请求地址主机为时,sub=www,以结尾的主机地址都能被路由;
例⼦2:{sub},当请求地址为,sub=,代表来⾃任何主机的请求都能被路由。
Predicate会提取uri模板变量作为map集合,并放置在Attributes()中,key为
ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE,这些变量值能在中使⽤。MethodRoutePredicateFactory
作⽤:接收⼀个或多个http请求⽅法参数,如果请求⽅法匹配,则被路由。
spring:
cloud:
gateway:
routes:
- id: method_route
uri:
predicates:
- Method=GET,POST
PathRoutePredicateFactory
作⽤:接收两个参数,路径表达式(Spring PathMatcher patterns)集合和⼀个名为matchTrailingSlash(默认为true)的参数,如果请求路径能够匹配,则被路由
spring:
cloud:
gateway:
routes:
- id: path_route
uri:
predicates:
- Path=/red/{segment},/blue/{segment}
如果matchTrailingSlash为false,则 /red/1/不能被路由。
segment为predicate提取的模板变量,可使⽤⼯具类轻松获取。
Map<String, String> uriVariables = PathPredicateVariables(exchange);
String segment = ("segment");
QueryRoutePredicateFactory
作⽤:提供两个参数:必选的param和可选的regexp。如果请求保护⼀个

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。