Spring Cloud Java Gateway

Spring Cloud -- Gateway服務網關架構、特性及工作流程

黃翰暉 Jacob Huang 2022/07/05 10:00:00
541

前言

     本篇我們要來探討Spring Cloud Gateway服務網關,原本Spring Cloud在1.x版本使用的服務網關為Netfilx公司開發的Zuul網關,但因為Zuul在2.x版本中升級不順利,因此Spring Cloud最後自己研發了Gateway網關代替了Zuul。

     Gateway是在Spring系統上構建的API網關服務,基於Spring 5、Spring Boot 2和Project Reactor等技術,目的在提供一種簡單而有效的方式來對API進行路由,以及提供強大的過濾器功能,例如:熔斷、限流、重試等。

     微服務網關的架構位置通常在如下圖的位置:

Spring Cloud Gateway 特性     

     Spring Cloud Gateway 具有如下8點特性:

1. 基於Spring 5、Spring Boot 2和Project Reactor進行構建。

2. 動態路由:能夠匹配任何請求屬性。

3. 可以對路由指定Predicate(斷言)和Filter(過濾器)。

4. 集成Hystrix的斷路器功能。

5. 集成Spring Cloud服務發現功能。

6. 易於撰寫的Predicate(斷言)和Filter(過濾器)。

7. 請求限流功能。

8. 支持路徑重寫。

 

Gateway有三大核心概念,分別是Route(路由)、Predicate(斷言)、Filter(過濾),說明如下:

1. Route(路由):路由是構建服務網關的基本模組,它由ID、目標URI,一系列的斷言和過濾器組成,如果斷言為true則匹配該路由

2. Predicate(斷言):參考Java 8的java.util.function.Predicate,開發人員可以匹配HTTP請求中的所有內容,如有請求與Predicate相匹配則進行路由。

3. Filter(過濾):為Spring框架中的GatewayFilter實例,使用過濾器,可以在請求被路由前或後對請求進行修改。

 

Spring Cloud Gateway 工作流程     

     Gateway的工作流程如下圖:

 

上圖的意思是:客戶端向Spring Cloud Gateway發送請求,然後在Gateway Handler Mapping中找到與請求相匹配的路由,將其發送至Gateway Web Handler。

Handler再通過指定的過濾器鍊來將請求發送至我們實際的服務業務邏輯,然後返回。

過濾器可以在發送請求之前(pre)或之後(post)執行業務邏輯。

Filter在"pre"類型的過濾器中可以做參數檢驗、權限檢驗、流量監控、log輸出、協議轉換等等的功能。

在"post"類型的過濾器中可以做響應內容、響應頭的修改、log輸出、流量監控等等功能。

Gateway的核心邏輯:路由轉發 + 執行過濾器鍊

 

以上,就是我們這篇文章針對Spring Cloud Gateway的架構、特性及工作流程做一個較詳細的整理,下一篇我們會來實作Gateway服務網關的搭建,文章中若有疏漏,也歡迎各位前輩不吝指教,謝謝大家~

 

參考文獻

 

尚硅谷Spring Cloud教程

Spring Cloud官方網站

 

黃翰暉 Jacob Huang