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 发出请求。然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指 定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(“pre”)或之后(“post”)执行业务逻辑。

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

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

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

用于接口请求参数校验、判断新老数据是否有变化需要进行更新操作。add–与、or–或、negate–非。
在这里插入图片描述
在这里插入图片描述

配置示例:

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等请求,默认情况下获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ewenge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值