1. Zuul的工做機制
Zuul提供了一個框架,能夠對過濾器進行動態的加載,編譯,運行。過濾器之間沒有直接的相互通訊,他們是經過一個RequestContext的靜態類來進行數據傳遞的。RequetstContext類中的ThreadLocal變量來記錄每一個request所須要傳遞的數據。html
它包含了對請求的路由和過濾兩個功能,其中路由功能負責將請求轉發到具體的微服務 實例上,而過濾器功能則負責對請求進行預處理。app
然而實際上,路由功能在真正運行時,它的路由映射和請求轉發功能也是由過濾器來完成的。路由映射器主要經過pre類型的的過濾器完成,將請求路徑與配置的路由 規則進行匹配,找到須要的轉發的目標地址,而請求轉發的部分則是由route類型的過濾器來完成。框架
因此,過濾器能夠說是Zuul實現API網管功能最爲核心的部件,每個進入Zuul的HTTP請求都會通過一些列的過濾器處理連獲得請求響應並返回給客戶端。微服務
過濾器是由Groovy寫得,這些過濾器文件被放在Zuul Server上的特定目錄下面,Zuul會按期輪詢這些目錄,修改過的過濾器會動態的加載到Zuul Server中以便於request使用。post
過濾器的類型學習
PRE:在請求達到Origin Server以前調用,好比身份驗證spa
CUSTOM:自定義的過濾器3d
ROUTING:在路由請求時被調用代理
POST:在routing和error過濾器以後被調用,好比作各類統計htm
ERROR:在其餘階段發生錯誤時執行該過濾器
2. 分析
1. @EnableZuulProxy和@EnableZuulServer註解
@EnableZuulServer註解:普通網關,只支持基本的route和filter
@EnableZuulProxy註解: 配合上服務發現與熔斷開關的@EnableZuulServer的加強版,具備反向代理的功能。
2. ZuulConfiguration
這裏時調用zuulFilter的入口
這裏時將全部的filter加載到FilterRegistry中
3. ZuulProxyConfiguration繼承了ZuulConfiguration
4. 過濾器的介紹
5. ServletDetectionFilter過濾器
用來檢測當前請求是經過Spring的DispatcherServlet處理運行仍是經過ZuulServlet來處理運行的,會被Servlet30WrapperFilter這個過濾器使用。