在介紹 Zuul 可以提供的功能之前,請大家先考慮一個問題:
微服務系統中往往包含很多個功能不同的子系統或微服務,那麼,外部應用怎樣去訪問各種各樣的微服務呢?這也是 Zuul 所要解決的一個主要問題。
在微服務架構中,後端服務往往不直接開放給調用端,而是通過一個服務網關根據請求的url,路由到相應的服務,即實現請求轉發,效果如下圖所示。
Zuul 提供了服務網關的功能,可以實現負載均衡、反向代理、動態路由、請求轉發等功能。Zuul 大部分功能都是通過過濾器實現的,Zuul 中定義了四種標準的過濾器類型,同時,還支持自定義過濾器(課程中實現了兩個自定義過濾器,用來記錄訪問延遲)。這些過濾器的類型也對應於請求的典型生命週期,如下圖所示。
-
pre:在請求被路由之前調用
-
route:在路由請求時被調用
-
post:在 route 和 error 過濾器之後被調用
-
error:處理請求時發生錯誤時被調用