Spring Cloud Zuul 的 route 运行机制分析

扫码关注公众号:Java 技术驿站

发送:vip
将链接复制到本浏览器,永久解锁本站全部文章

【公众号:Java 技术驿站】 【加作者微信交流技术,拉技术群】

概要

下面的内容分两个部分,spring-cloud-netflix-core 是spring部分的处理,负责把zuul接入spring cloud 体系;zuul-core 提供 ZuulFilter 机制,以及对应的处理模型。

spring-cloud-netflix-core-1.3.1.RELEASE.jar EnableZuulProxy EnableZuulServer ZuulHandlerMapping ZuulController

zuul-core-1.3.0.jar ZuulServlet FilterProcessor ZuulFilter RequestContext

zuul 的配置 & filter 注册 zuul的应用,开始于 EnableZuulProxy 或 EnableZuulServer 标签,代码如下:
2019102020047\_1.png

2019102020047\_2.png

这两个标签的作用,是引入Zuul的配置类。

ZuulProxyConfiguration 派生自 ZuulConfiguration,扩展了对 Eureka Server 上注册的服务的动态路由。
2019102020047\_3.png

ZuulConfiguration 中,主要做了几个事情: 1、加载路由配置信息;
2019102020047\_4.png

2、提供 zuulServlet 的注册 bean;
2019102020047\_5.png

3、提供默认的路由表信息;
2019102020047\_6.png

4、创建内置的filter bean;
2019102020047\_7.png

5、通过 ZuulFilterConfiguration 加载和注册 filter; filter 只要确认是 ZuulFilter 类型的 bean 就行。
2019102020047\_8.png

URL 的派发 url 的派发机制,是通过Spring MVC 机制管理的,通过 ZuulHandlerMapping 实现 AbstractUrlHandlerMapping 提供的映射机制。
2019102020047\_9.png

注册机制很简单,就是把路由信息转给 ZuulController来处理:
2019102020047\_10.png

ZuulController 再把请求转交给 ZuulServlet:
2019102020047\_11.png

zuul 的 route 机制 ZuulServlet 会接管进入zuul的所有请求,并向注册的 ZuulFilter 转发:
2019102020047\_12.png

请求处理的全过程如下:
2019102020047\_13.png

其中,RequestContext 是所有 ZuulFilter 共享的处理上下文,在线程局部存储中维护。

ZuulFilter 通过 FilterProcessor 执行,执行的场景基本相同:
2019102020047\_14.png

2019102020047\_15.png

很有趣,不管 ZuulFilter 的返回值是什么,所有的 ZuulFilter 都会依次执行,打断执行序的方式是抛异常,走Zuul的 error 流程。

ZuulFilter 的 runFilter 方法,是单个 Filter 的处理逻辑,描述了 ZuulFilterResult 的形成过程:
2019102020047\_16.png

赞(0) 打赏
版权归原创作者所有,任何形式的转载请联系博主:daming_90:Java 技术驿站 » Spring Cloud Zuul 的 route 运行机制分析

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏