在前面的三篇文章「微服务网关——需求篇」「 微服务网关——设计篇」「 微服务网关——实现篇」中,我们分别从微服务网关的需求、设计和实现方面进行了阐述。

在「 微服务网关——实现篇 」中,我们阐述了如何基于SpringCloud Gateway来实现微服务网关。

本文将详细分析SpringCloud Gateway是如何实现的。

架构

SpringCloud Gateway(下面简称SG)基于SpringWebFlux,整体架构如下图所示:

springcloudgateway有配置页面么(SpringCloudGateway详解)(1)

SG定义了几个概念:

架构流程

一个请求被SG处理的大致流程如下所示:

下面以一个具体的例子来进行说明。

SG支持基于Java编码方式的配置以及基于配置文件的配置。

springcloudgateway有配置页面么(SpringCloudGateway详解)(2)

springcloudgateway有配置页面么(SpringCloudGateway详解)(3)

这两个配置是等价的。

启动流程

springcloudgateway有配置页面么(SpringCloudGateway详解)(4)

RoutePredicateHandlerMapping是HandlerMapping的一个实例,HandlerMapping归属于SpringWebFlux,这里不做说明,请自行查阅相关资料。

springcloudgateway有配置页面么(SpringCloudGateway详解)(5)

请求处理流程

我们结合上面的配置文件,以及SG具体的实例来说明SG对请求的处理流程:

springcloudgateway有配置页面么(SpringCloudGateway详解)(6)

关键流程代码

springcloudgateway有配置页面么(SpringCloudGateway详解)(7)

执行服务

SG中服务的执行也是通过GlobalFilter来执行的,SG中默认配置了一些GlobalFilter,下面列出了部分。

springcloudgateway有配置页面么(SpringCloudGateway详解)(8)

具体Filter作用这里不做详述,可自行阅读源码,这里只关注三个Filter:

先看LoadBalancerClientFilter,核心源码如下:

springcloudgateway有配置页面么(SpringCloudGateway详解)(9)

NettyRoutingFilter在LoadBalancerClientFilter之后,用于执行服务。

springcloudgateway有配置页面么(SpringCloudGateway详解)(10)

最后由NettyWriteResponseFilter来处理响应。

springcloudgateway有配置页面么(SpringCloudGateway详解)(11)

参考资料,