SpringCloud系列之网关gateway-2.Gateway体系架构解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud系列之网关gateway-2.Gateway体系架构解析相关的知识,希望对你有一定的参考价值。

参考技术A 打开Gateway的自动装配工厂GatewayAutoConfiguration来看一下,排头第一个类就是Netty。

Netty是什么?在网络传输领域Netty就是身份的象征,黄金AK般的存在,它是非阻塞、高性能、高可靠的异步输入输出框架,用一个字概括就是“快”。在后面会安排专门的章节介绍基于Netty的高性能通信,所以这里我们不对Netty做深入探讨,但是需要了解下Netty在Gateway中主要应用在以下几个地方:

 发起服务调用:由NettyRoutingFilter过滤器实现,底层采用基于Netty的HttpClient发起外部服务的调用
 Response传输:由NettyResponseFilter过滤器实现,网络请求结束后要将Response回传给调用者
 Socket连接:具体由ReactorNettyWebSocketClient类承接,通过Netty的HttpClient发起连接请求

在Gateway中发起Request和回传Response之类的步骤都是通过一系列过滤器完成的,有关过滤器的内容将在稍后介绍。
让我们用一张图来概括一下Netty在Gateway组件中的位置:

Client发起请求到服务网关之后,由NettyRoutingFilter底层的HttpClient(也是Netty组件)向服务发起调用,调用结束后的Response由NettyResponseFilter再回传给客户端。有了Netty的加持,网络请求效率大幅提升(Zuul 1.x还是使用Servlet,在2.x版本才移步到Netty)由此可见,Netty贯穿了从Request发起到Response结束的过程,承担了所有和网络调用相关的任务。

接下来,让我们梳理一下Gateway框架的加载过程,从Gateway自动装配的角度,看看它都需要加载什么资源

 AutoConfig 作为核心自动装配主类,GatewayAutoConfiguration负责初始化所有的Route路由规则、Predicate断言工厂和Filter(包括Global Filter和Route Filter),这三样是Gateway吃饭的家伙,用来完成路由功能。AutoConfig也会同时加载Netty配置
 LoadBalancerClient 这部分在AutoConfig完成之后由GatewayLoadBalancerClientAutoConfiguration负责加载,用来加载Ribbon和一系列负载均衡配置
 ClassPathWarning 同样也是在AutoConfig完成之后触发(具体加载类为GatewayClassPathWarningAutoConfiguration),由于Gateway底层依赖Spring WebFlux的实现,所以它会检查项目是否加载了正确配置
 Redis 在Gateway中Redis主要负责限流的功能

除了上面几个核心装配工厂以外,还有两个打酱油的路人,它们并不直接参与Gateway的核心功能,但是会提供一些重要的支持功能,我们也来一道认识下:
 路人甲 GatewayMetricsAutoConfiguration负责做一些统计工作,比如对所谓的“short task”运行时长和调用次数做统计
 路人乙 GatewayDiscoveryClientAutoConfiguration服务发现客户端自动装配类

SpringCloud系列之网关gateway-9.自定义过滤器实现接口计时功能

参考技术A 配置过滤器很简单: .filter(timerFilter)

最后需要注意一点的是如果我们配置的是局部的过滤器就继承GatewayFilter,如果是全局就继承GlobalFilter,全局过滤器是不需要配置在路由规则中的,因为是全局,所以所有的路由都会首先进行全局过滤器的校验。

以上是关于SpringCloud系列之网关gateway-2.Gateway体系架构解析的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud --- 服务网关 (Gateway)

微服务权限终极解决方案(spring-cloud-gateway-oauth2)

SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

SpringCloud系列之网关gateway-4.路由功能详解

SpringCloud系列之网关gateway-12.实现JWT鉴权

深入Java微服务之网关系列4: SpringCloud gateway详解(史上最全)