Spring cloud gateway详解和配置使用

一、基本功能

网关核心功能是路由转发,因此不要有耗时操作在网关上处理,让请求快速转发到后端服务上

网关还能做统一的熔断(Hystrix断路器)、请求限流(接口、用户)、安全认证、日志监控、路径重写、服务注册发现、可针对路由设置Predicate(断言)和 Filter(过滤器)等

匹配的注册中心:Eureka、Consul、Nacos

Zuul对比gateway:Zuul1.x是阻塞的,2.x的版本中,Zuul也是基于Netty,也是非阻塞的,差别不大

Gateway是基于WebFlux的(协调上下游各个组件提供响应式编程支持,非阻塞)

代理 延迟 平均请求/秒/线程
gateway 6.61ms 3.24k
linkered 7.62ms 2.82k
zuul 12.56ms 2.09k
none 2.09ms 11.77k

二、工作原理

Spring cloud gateway详解和配置使用_第1张图片

原理说明:客户端向 Spring Cloud Gateway 发出请求。然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指 定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(“pre”)或之后(“post”)执行业务逻辑。

注: Filter在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等,

在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。

三、predicate(决定了一个请求走哪一个路由)

用于接口请求参数校验、判断新老数据是否有变化需要进行更新操作。add–与、or–或、negate–非。
Spring cloud gateway详解和配置使用_第2张图片
Spring cloud gateway详解和配置使用_第3张图片

配置示例:

1)After Route Predicate Factory 时间匹配,只有当前时间大于设定时间,路由才会匹配


spring:

cloud:

gateway:

routes:

- id: after_route

uri: http://www.google.com

predicates:

- After=2018-12-25T14:33:47.789+08:00


这个路由规则会在东8区的2018-12-25 14:33:47后,将请求都转跳到google。

2)Before Route Predicate Factory 时间匹配,只要当前时间小于设定时间,路由才会匹配请求


spring:

cloud:

gateway:

routes:

- id: before_route

uri: http://www.google.com

predicates:

- Before=2018-12-25T14:33:47.789+08:00


这个路由规则会在东8区的2018-12-25 14:33:47前,将请求都转跳到google。

3)Between Route Predicate Factory 时间匹配,只要当前时间大于第一个设定时间,并小于第二个设定时间,路由才会匹配请求。


spring:

cloud:

gateway:

routes:

- id: between_route

uri: http://www.google.com

predicates:

- Between=2018-12-25T14:33:47.789+08:00, 2018-12-26T14:33:47.789+08:00


这个路由规则会在东8区的2018-12-25 14:33:47到2018-12-26 14:33:47之间,将请求都转跳到google。

4)Cookie Route Predicate Factory 参数匹配 使用的是cookie名字和正则表达式的value作为两个输入参数,请求的cookie需要匹配cookie名和符合其中value的正则


spring:

cloud:

gateway:

routes:

- id: cookie_route

uri: http://www.google.com

predicates:

- Cookie=cookiename, cookievalue


路由匹配请求存在cookie名为cookiename,cookie内容匹配cookievalue的,将请求转发到google。

5)Header Route Predicate Factory 参数匹配,正则匹配header的name,value


spring:

cloud:

gateway:

routes:

- id: header_route

uri: http://www.google.com

predicates:

- Header=X-Request-Id, \d+


路由匹配存在名为X-Request-Id,内容为数字的header的请求,将请求转发到google。

6)Host Route Predicate Factory host匹配


spring:

cloud:

gateway:

routes:

- id: host_route

uri: http://www.google.com

predicates:

- Host=**.somehost.org,**.anotherhost.org


路由会匹配Host示例:www.somehost.org 或 beta.somehost.org或www.anotherhost.org等请求。

7)Method Route Predicate Factory HTTP的method来匹配路由


spring:

cloud:

gateway:

routes:

- id: method_route

uri: http://www.google.com

predicates:

- Method=GET


路由会匹配到所有GET方法的请求。根据请求的方式来匹配

8)Path Route Predicate Factory 使用path列表作为参数,使用Spring的PathMatcher匹配path,可以设置可选变量。


spring:

cloud:

gateway:

routes:

- id: host_route

uri: http://www.google.com

predicates:

- Path=/foo/{segment},/bar/{segment}


上面路由可以匹配诸如:/foo/1 或 /foo/bar 或 /bar/baz等 其中的segment变量可以通过下面方式获取:

PathMatchInfo variables = exchange.getAttribute(URI_TEMPLATE_VARIABLES_ATTRIBUTE);

Map uriVariables = variables.getUriVariables();

String segment = uriVariables.get(“segment”);

9)Query Route Predicate Factory 可以通过一个或两个参数来匹配路由,一个是查询的name,一个是查询的正则value。


spring:

cloud:

gateway:

routes:

- id: query_route

uri: http://www.google.com

predicates:

- Query=baz


路由会匹配所有包含baz查询参数的请求


spring:

cloud:

gateway:

routes:

- id: query_route

uri: http://www.google.com

predicates:

- Query=foo, ba.


路由会匹配所有包含foo,并且foo的内容为诸如:bar或baz等符合ba.正则规则的请求。

10)RemoteAddr Route Predicate Factory 通过无类别域间路由(IPv4 or IPv6)列表匹配路由


spring:

cloud:

gateway:

routes:

- id: remoteaddr_route

uri: http://www.google.com

predicates:

- RemoteAddr=192.168.1.1/24


上面路由就会匹配RemoteAddr诸如192.168.1.10等请求,默认情况下获取

你可能感兴趣的:(java,gateway,springcloud,spring,boot)