Gateway是什么
Gateway是SpringCloud自己研发的网关用于代替Zuul,这里需要说明一点的是Gateway基于WebFlux,那么什么是WebFlux呢?
WebFlux
WebFlux是一个典型的异步非阻塞框架,相对于传统的web框架来说,它可以运行在诸如Netty,Undertow及支持Servlet3.1的容器上,它的核心是基于Reactor的相关API实现的。WebFlux有如下两方面的独特优势:
- 非阻塞式
servlet3.1提供了非阻塞的API,但WebFlux提供了一种比其更完美的解决方案。使用非阻塞的方式
可以利用较小的线程或硬件资源来处理并发进而提高其可伸缩性。
- 函数式编程特点
WebFlux支持函数式编程来定义路由端点处理请求
Gateway可以做什么
网关可以理解为网络关卡,是整个微服务的统一入口。
可以和服务注册中心完美的整合,如:Eureka、Consol、Nacos。Spring Cloud Gateway 功能特征如下:
- 基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
- 动态路由
- Predicates 和 Filters 作用于特定路由
- 集成 Hystrix 断路器
- 集成 Spring Cloud DiscoveryClient
- 易于编写的 Predicates 和 Filters
- 限流
- 路径重写
GateWay的核心就是Route、Predicates 和 Filters 作用于特定路由。 - Route:路由是网关的基本构件。它由ID、目标URI、谓词集合和过滤器集合定义。如果聚合谓词为真,则匹配路由。
- Predicate:参照Java8的新特性Predicate。这允许开发人员匹配HTTP请求中的任何内容,比如头或参数。
- Filter:可以在发送下游请求之前或之后修改请求和响应。
Spring Cloud Gateway 工作原理
- 客户端向 Spring Cloud Gateway 发出请求。然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(“pre”)或之后(“post”)执行业务逻辑。
- Filter在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等,在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。
- 核心逻辑就是路由转发,执行过滤器链。