我们的项目采用 Spring Cloud Gateway gateway 的版本为:2.2.8.RELEASE
简介:
Spring Cloud Gateway(2.2.8.RELEASE) 是 Spring 公司基于 Spring 5.0, Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。
其不仅提供了统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控和限流、重试等。
它的目标是替代 Netflix Zuul,在 Spring Cloud2.0 以上版本中,没有对新版本的 Zuul 2.0 以上最新高性能版本进行集成,仍然还是使用的 Zuul 1.x 非 Reactor模式的老版本。
为了提升网关性能,Spring Cloud Gateway 是基于 WebFlux 框架实现的,而 WebFlux 框架底层则使用了高性能的 Reactor 模式通信框架 Netty。
内部工作原理:
-
客户端请求到 Gateway 网关,会先经过 Gateway Handler Mapping 进行请求和路由匹配。
-
匹配成功后再发送到 Gateway Web Handler 处理,然后会经过特定的过滤器链,经过所有前置过滤后,会发送代理请求。
-
请求结果返回后,最后会执行所有的后置过滤器。
通过上图可以看出,Spring Cloud Gateway 的主要流程为:
-
客户端请求会先进入到 Gateway,具体的讲应该是 DispacherHandler(因为 Gateway 引入了 WebFlux,作用可以类比 MVC 的 DispacherServlet)
-
Gateway 根据用户的请求找到相应的 HandlerMapping,请求和具体的 handler 之间有一个映射关系,网关会对请求进行路由,handler 会匹配到 RoutePredicateHandlerMapping,匹配请求对应的 Route,然后到达 Web 处理器。
-
WebHandler 代理了一系列网关过滤器和全局过滤器的实例,这些过滤器可以对请求和响应进行修改,最后由代理服务完成用户请求,并将结果返回。
Spring Cloud Gateway 官方文档:
https://docs.spring.io/spring-cloud-gateway/docs/2.2.8.RELEASE/reference/html/