简介:最近,通过 - 深入学习春季云网关,我发现该框架的架构设计非常简单有效。许多组件的设计值得学习。本文对Spring Cloud Gateway进行了简单的介绍,以及请求Spring Cloud Gatewaydo的处理过程进行了更详细的分析。
作者|Zheng Source |阿里技术公共帐户
最近,通过 - 深度学习春季云网关,我发现该框架的架构设计非常简单有效。许多组件的设计值得学习。本文简单地介绍了请求Spring Cloud Gateway的处理过程的Spring Cloud Gateway处理过程。更多详细的分析。
Spring Cloud Gateway是由Spring正式推出的API网关,其中包含Spring5,Springboot2,Project Reactor的Netty,它的基础通信框架IS。发射开始时启动了Spring Cloud Gateway,Netflix推出了类似的功能API网关框架Zuul,但Zuul认为通信方法正在阻止。尽管后来升级为非块Zuul2,但由于弹簧云网关。
1个关键术语
使用Spring Cloud Gateway时,您需要了解三个模块,也就是说
路线:
也就是说,一组路由规则是一个集成诸如URI,谓词,过滤器之类的属性的元数据类。
谓词:
这是JAVA8功能编程的一种方法。可以在这里看到以查看满足哪些条件。路线规则生效。
筛选:
滤波器可以视为弹簧云网关的核心模块。熔化,安全性,逻辑执行和网络调用由过滤器完成。其中,它分为网关过滤器和全局过滤器。规则是有效的。
您可以首先查看代码:
上图是Spring Cloud Gateway的正式文档给出的工作原理图。弹簧云网关在收到请求后匹配路由规则,然后将其交给Web处理程序进行处理。Web处理程序将执行一系列过滤器逻辑。
1接受请求
弹簧云网关的基础框架是Netty。接受请求的关键类别是ReactorhttphandlerAdapter。要做的事情非常简单,即,请求,对HTTP的请求的响应,响应和移交HTTP处理程序的逻辑。此类的源代码仅保留核心逻辑。
2个网络过滤器链
HTTP处理程序的第一件事是将请求和响应转换为交换。该交换是非常核心,是每个滤波器之间参数循环的载体。此类包含请求,响应,属性(扩展字段)。网络过滤器链的执行,逻辑主要是监视。
其中,WebFilterChainParoxy还将导致一个新的过滤链,主要是安全性,日志和与认证相关的逻辑。可以看出,弹簧云网关的滤波器设计是一个分层嵌套,具有很强的可扩展性。
3寻找路由规则
核心类是RoutePredicateHandLermapping。逻辑也很简单。它是遍历所有路线规则。
因为我使用路径将其过滤在这里,所以它背后的逻辑是由PathRoutepredicateFactory完成的。除了PathRoutePredicateFactory外,还有许多谓词规则。
这些路由规则可以从官方文件中找到阴影。
4个核心过滤链执行
找到路由规则后的下一步是执行的。这里的核心类别是FeltingWebHandler。源代码是:
该怎么做很简单:
由于我的配置包含添加请求参数的逻辑,因此名为I Informut的网关过滤器称为AddRequequestParameterGatewayFilterFactory。其余的都是Gloabl过滤器。这些过滤器的功能主要是URL分析。逻辑等待,因为我们在这里使用远程模式,因此转发请求将由forwardRoutingFilter执行。
5请求转发
向前的窗口要做的事情也很简单。Spring MVC的能力直接复制,并将请求提交给DispatcherHandler进行处理。
6响应返回写作
响应的核心类别是NetTyWriterSponseFilter,但是您可以注意到,执行者链中的NetTyWriterSponseFilter的排序位于最前沿。根据原因,应将响应类别倾斜。这里的设计很聪明。执行其后面的过滤器后,执行此逻辑。
阅读了请求过程代码的Spring Cloud网关后,有一些感觉: