介绍
Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.x 、 Project Reactor、Spring WebFlux 等技术开发的网关
它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。
提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。
官网:
https://cloud.spring.io/spring-cloud-gateway/2.2.x/reference/html/
功能
- 反向代理
- 鉴权
- 流量控制
- 熔断
- 日志监控
特性
- 基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
- 动态路由
- Predicates 和 Filters 作用于特定路由
- 集成 Hystrix 断路器
- 集成 Spring Cloud DiscoveryClient
- 易于编写的 Predicates 和 Filters
- 限流
- 路径重写
gateway与同类产品比较
gateway VS zuul 1.x
Netflix Zuul 1.x停更,基于servlet2.5使用阻塞模式,部署在Tomcat容器中
Netflix Zuul 2.x处于混乱,开发 Gateway
gateway 由spring cloud团队开发,目标是替代 Netflix Zuul
与spring其他组件集成更好
基于netty异步非阻塞模型开发,性能提升
gateway VS nginx
同样都有代理的功能,但gateway功能更为强大,与spring家族集成后,可实现更多功能
当并发量大到一定程度时,需要 nginx+gateway 实现负载均衡
概念
https://cloud.spring.io/spring-cloud-gateway/2.2.x/reference/html/#glossary
Route-路由
网关的基本构建块。它由ID,目标URI,一些断言和过滤器组成。如果断言为true,则匹配路由。
Predicate-断言
Java 8 Function Predicate,可以匹配HTTP请求中的所有内容,例如请求头或参数
Filter-过滤
Spring 框架的 GatewayFilter实例。在发送请求之前或之后修改请求和响应。
比喻
Filter相当于学生宿舍门卫,拦截来访者;
断言相当与进宿舍的要求,有学生证就能进;
路由负责把符合要求的学生送到寝室
工作流程
https://cloud.spring.io/spring-cloud-gateway/2.2.x/reference/html/#glossary
客户端向Spring Cloud Gateway发出请求。如果Gateway Handler Mapping有与请求匹配的路由,则将其发送到Gateway Web Handler。
该处理程序通过 指定的的过滤器链,过滤器由虚线分隔的原因是:过滤器可以在发送请求之前和之后执行业务逻辑。
所有“发送请求之前”的过滤器均被执行,做参数校验、权限校验、流量监控、日志输出、协议转换等。
在发送请求之后,可以做响应头的修改、日志输出等


