简介
- spring cloud gateway 2 基于 Spring Boot 2和 Spring Webflux ,它使用 Netty
- 注意:由于它使用了
Spring Webflux
(spring-boot-starter-webflux
),所以不再兼容spring-boot-starter-web
- 注意:由于它使用了
- 对比zuul,spring cloud gateway 支持长连接且提供丰富的路由规则实现(丰富的Predicate和Filter)。
概念
route(路由)
- spring cloud gateway 的 route 由以下部分组成
- ID:仅是一个名称
- URI:标示远程资源,如https://www.baidu.com
- Predicate:谓词(java8的概念)
- Filter:过滤器
Predicate(谓词)
- 通过Predicate,spring cloud gateway可以让开发人员匹配HTTP请求中的任何内容,例如请求头或参数。
- spring cloud gateway可以根据HTTP请求中的任何内容进行路由,而不局限于url路径
- 可以参考下面的图片
Filter(过滤器)
- 过滤器用于发送和返回请求之前,修改请求和响应
原理图
-
图中三个框代表的意义
-
Gateway Client
可以是浏览器 - 中间的大框就是spring cloud gateway的内部工作原理图
-
Proxied Service
可以是在eureka等注册中心里注册的服务
-
官方对这个原理图的描述如下
Clients make requests to Spring Cloud Gateway. If the Gateway Handler Mapping determines that a request matches a Route, it is sent to the Gateway Web Handler. This handler runs sends the request through a filter chain that is specific to the request. The reason the filters are divided by the dotted line, is that filters may execute logic before the proxy request is sent or after. All "pre" filter logic is executed, then the proxy request is made. After the proxy request is made, the "post" filter logic is executed.
- 翻译成中文大概就是
- 首先,客户端向Spring Cloud Gateway发出请求。
- 如果请求与Spring Cloud Gateway中的某个路由匹配(请求匹配到某个处理器),则将请求发送到对应路由的处理器中。
- 最后过滤器处理请求