目录
一、Spring Cloud Gateway概览和特性
二、Spring Cloud Gateway集成
三、Spring Cloud Gateway专业术语和工作原理
1、专业术语
2、工作原理
四、路由Predicate工厂
五、过滤器工厂
六、全局filter
七、ssl支持
八、RouteDefinitionLocator编码方式配置路由
九、CORS配置方式实现跨域
之前有写过Spring Cloud Netflix Zuul(Spring Cloud Zuul的Api网关实现和Spring Cloud Zuul详细说明)的文章,Zuul分为1.x和2.x版本。但是首先肯定的是Spring Cloud Gateway的性能高于Zuul,但是Gateway基于Spring 5,Spring Boot 2和Project Reactor实现(对版本的要求比较高)。Spring Cloud Gateway旨在提供一种简单而有效的方法来路由到api,并为它们提供交叉关注点,例如:安全性、监视/度量和弹性。
特性:
构建在Spring 5,Spring Boot 2,Project Reactor之上
能够为请求进行路由(Api网关)
Predicates和Filter为每个路由进行特殊请求处理
Hystrix断路器的集成
Spring Cloud注册中心支持
请求频率限制
重写请求(与Nginx的类似)
在start.spring.io中添加gateway模块,或者在pom中添加如下依赖:
org.springframework.cloud spring-cloud-starter-gateway
引入了gateway相关maven依赖后默认开启Sping Cloud Gateway,但是也可以在bootstrap.properties(或者yml)添加配置进行关闭:
spring.cloud.gateway.enabled=false
Route:路由是网关的基本模块,由id,目标uri、Predicate集合和Filter集合组成
Predicate:Predicate是一个Java8的函数,输入类型是Spring的ServerWebExchange,允许匹配来自Http的任何内容,如请求头或者参数。
Filter:使用特定工厂构建的Spring GatewayFilter实例,可以在发生下游请求之前修改请求信息或者响应请求之后修改返回内容(这一点与Zuul的过滤器一致)。
客户端发送请求到Spring Cloud Gateway服务,如果请求能够进行映射并且满足路由则发送到Gateway Web Handler,再根据配置的Filter调用链在请求前或者请求后进行业务逻辑处理。
需要支持是再添加
使用RouteDefinitionLocator进行路由、Predicate、Filter的配置,即可以有两种实现方式,配置文件和编码的方式,如下:
@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route(r ->
r.path("/kevin/**")
.filters(
f -> f.stripPrefix(1)
)
.uri("http://127.0.0.1:8090/helloWorld")
)
.build();
}
spring:
cloud:
gateway:
globalcors:
corsConfigurations:
'[/**]':
allowedOrigins: "https://www.kevin.com"
allowedMethods:
- GET
关于也是类似Nginx等网关服务常用的解决手段之一,Spring Cloud Gateway这样配置后,Get请求 www.kevin.com的服务就可以进行跨域访问了,至于跨域相关的问题和解决方案可以参见我之间写的跨域分享问题。