目录
一、Spring Cloud Gateway概览和特性
二、Spring Cloud Gateway集成
三、Spring Cloud Gateway专业术语和工作原理
1、专业术语
2、工作原理
四、路由Predicate工厂
五、过滤器工厂
六、全局filter
七、ssl支持
八、RouteDefinitionLocator编码方式配置路由
九、CORS配置方式实现跨域
一、Spring Cloud Gateway概览和特性
之前有写过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的类似)
二、Spring Cloud Gateway集成
在start.spring.io中添加gateway模块,或者在pom中添加如下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
引入了gateway相关maven依赖后默认开启Sping Cloud Gateway,但是也可以在bootstrap.properties(或者yml)添加配置进行关闭:
spring.cloud.gateway.enabled=false
三、Spring Cloud Gateway专业术语和工作原理
1、专业术语
Route:路由是网关的基本模块,由id,目标uri、Predicate集合和Filter集合组成
Predicate:Predicate是一个Java8的函数,输入类型是Spring的ServerWebExchange,允许匹配来自Http的任何内容,如请求头或者参数。
Filter:使用特定工厂构建的Spring GatewayFilter实例,可以在发生下游请求之前修改请求信息或者响应请求之后修改返回内容(这一点与Zuul的过滤器一致)。
2、工作原理
客户端发送请求到Spring Cloud Gateway服务,如果请求能够进行映射并且满足路由则发送到Gateway Web Handler,再根据配置的Filter调用链在请求前或者请求后进行业务逻辑处理。
四、路由Predicate工厂
- After Route Predicate Factory
- Before Route Predicate Factory
- Between Route Predicate Factory
- Cookie Route Predicate Factory
- Header Route Predicate Factory
- Host Route Predicate Factory
- Method Route Predicate Factory
- Path Route Predicate Factory
- Query Route Predicate Factory
- RemoteAddr Route Predicate Factory
五、过滤器工厂
- AddRequestHeader GatewayFilter Factory
- AddRequestParameter GatewayFilter Factory
- AddResponseHeader GatewayFilter Factory
- DedupeResponseHeader GatewayFilter Factory
- Hystrix GatewayFilter Factory
- FallbackHeaders GatewayFilter Factory
- PrefixPath GatewayFilter Factory
- PreserveHostHeader GatewayFilter Factory
- RequestRateLimiter GatewayFilter Factory
- RedirectTo GatewayFilter Factory
- RemoveHopByHopHeadersFilter GatewayFilter Factory
- RemoveRequestHeader GatewayFilter Factory
- RemoveResponseHeader GatewayFilter Factory
- RewritePath GatewayFilter Factory
- RewriteResponseHeader GatewayFilter Factory
- SaveSession GatewayFilter Factory
- SecureHeaders GatewayFilter Factory
- SetPath GatewayFilter Factory
- SetResponseHeader GatewayFilter Factory
- SetStatus GatewayFilter Factory
- StripPrefix GatewayFilter Factory
- Retry GatewayFilter Factory
- RequestSize GatewayFilter Factory
- Modify Request Body GatewayFilter Factory
- Modify Response Body GatewayFilter Factory
- Default Filters
六、全局filter
- Combined Global Filter and GatewayFilter Ordering
- Forward Routing Filter
- LoadBalancerClient Filter
- Netty Routing Filter
- Netty Write Response Filter
- RouteToRequestUrl Filter
- Websocket Routing Filter
- Gateway Metrics Filter
- Marking An Exchange As Routed
七、ssl支持
需要支持是再添加
八、RouteDefinitionLocator编码方式配置路由
使用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();
}
九、CORS配置方式实现跨域
spring:
cloud:
gateway:
globalcors:
corsConfigurations:
'[/**]':
allowedOrigins: "https://www.kevin.com"
allowedMethods:
- GET
关于也是类似Nginx等网关服务常用的解决手段之一,Spring Cloud Gateway这样配置后,Get请求 www.kevin.com的服务就可以进行跨域访问了,至于跨域相关的问题和解决方案可以参见我之间写的跨域分享问题。