Spring Cloud Zuul 的 route 运行机制分析


概要

下面的内容分两个部分,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 标签,代码如下:




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

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



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


2、提供 zuulServlet 的注册 bean;


3、提供默认的路由表信息;


4、创建内置的filter bean;


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



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


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


ZuulController 再把请求转交给 ZuulServlet:


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


请求处理的全过程如下:


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

ZuulFilter 通过 FilterProcessor 执行,执行的场景基本相同:



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

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




  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值