官方简介
该项目提供了一个建立在Spring Ecosystem之上的API网关,包括:Spring 5,Spring Boot 2和Project Reactor。Spring Cloud Gateway旨在提供一种简单而有效的方式来对API进行路由,并为他们提供切面,例如:安全性,监控/指标 和弹性等。
官方工作原理介绍
客户端向spring-cloud-gateway
请求网关映射处理程序
(gateway handler mapping),如果确认请求与路由匹配,则将请求发送到web处理程序
(gateway web handler),web处理程序
通过特定于该请求的过滤器链处理请求,图中filters
被虚线划分的原因是filters可以在发送代理请求之前(pre filter
)或之后执行逻辑(post filter
)。先执行所有pre filter
逻辑,然后进行请求代理。在请求代理执行完后,执行post filter
逻辑。
开始使用Spring-Cloud-Gateway
Spring Cloud Gateway依赖Spring Boot和Spring Webflux提供的Netty runtime,所以springboot必须在2.0或者以上
,springcloud在Finchley
以上,基本springcloud环境确认后,然后引入:
1 | <dependency> |
再将服务作为Eureka客户端注册至Eureka注册中心,这里省略,可以在GitHub代码中查看
路由配置
官网都是用的yml
配置文件配置,与properties
配置文件配置稍有不同,我这里全部使用properties
配置文件配置。
直接使用注册中心路由配置
1 | #使用服务发现路由 |
指定服务配置
1 | #设置路由id |
spring.cloud.gateway.routes.predicates
:路由断言,配置时必须得有一项,不一定是Path
;
spring.cloud.gateway.routes.uri
:配置路由uri,”lb:’serviceId’”前代表路由的服务,同时也可以是一个url
编码服务配置
1 |
|
总结
Spring-Cloud-Gateway与Zuul 1.0相比,前者基于WebFlux与Reactive线程模型的异步非阻塞框架,服务通过底层的Netty来进行发布及运行,异步非阻塞可以有效降低系统的线程数量,只需要很少的线程就可以完成较高的并发支持,而Zuul1.0是基于servlet性能上的差距可想而知,同时Spring-Cloud-Gateway还内置了许多的路由断言(Factories)
与过滤器(Filter)
可以减少开发人员的编码,和更好的功能支持和扩展。