前述:Spring Zuul是Spring微服務的網關,作爲微服務的入口,用來統一管理請求。Zuul不是把網關的所有事情都做了,而是暴露了當前請求的整個過程生命週期的處理。實際網關的實現邏輯還是需要我們自己處理,在解析完Zuul後我會提供一個網關限流的方案實例,並對其做擴展,以爲大家在實現的時候做參考。
說在前:我認爲相比直接上代碼怎麼實現網關限流來說,先了解原理更有助於我們理解與使用
一、環境描述
解析原理使用查看的的Zuul版本是: Spring Cloud 1.5.4
二、請求處理流程解析
1)Zuul架構圖
(摘自:https://blog.csdn.net/forezp/article/details/76211680 ,這篇文章的源碼解析還不錯,可以閱覽下)
網上的源碼解析文章很多,我這裏就不多做說明了。我這裏主要是想儘可能簡單、清楚的描述請求的處理流程,在開始之前有必要說明幾個關鍵的類:
- ServletWrappingController :該類的是Spring MVC中的請求封裝控制器,負責將請求轉給指定的servlet處理。
- ZuulController:Zuul中提供的繼承ServletWrappingController的子類,用將請求轉到ZuulServlet處理
- ZuulServlet:Zuul網關中網絡請求處理器
- ZuulRunner:將HttpServletRequest添加到請求的上下文中
- FilterProcessor:集中處理各生命週期的過濾器
- FilterLoader:存儲和加載過濾器的地方
下面就是我整理的請求處理流程:
上圖只說明了Zuul在處理請求的流程,讓大家知道我們的自定義的過濾器是在何時以及如何被執行的。Zuul其他的部分後面的文章會敘述。
三、Zuul腦圖