1. 程式人生 > >Spring Cloud Zuul 的 route 執行機制分析

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 的形成過程: