微服務閘道器Zuul遷移到Spring Cloud Gateway
在之前的文章中,我們介紹過微服務閘道器ofollow,noindex" target="_blank">Spring Cloud Netflix Zuul ,前段時間有兩篇文章專門介紹了Spring Cloud的全新專案Spring Cloud Gateway,以及其中的過濾器工廠。本文將會介紹將微服務閘道器由Zuul遷移到Spring Cloud Gateway。
Spring Cloud Netflix Zuul是由Netflix開源的API閘道器,在微服務架構下,閘道器作為對外的門戶,實現動態路由、監控、授權、安全、排程等功能。
Zuul基於servlet 2.5(使用3.x),使用阻塞API。 它不支援任何長連線,如websockets。而Gateway建立在Spring Framework 5,Project Reactor和Spring Boot 2之上,使用非阻塞API。 Websockets得到支援,並且由於它與Spring緊密整合,所以將會是一個更好的開發體驗。
在一個微服務整合的專案中microservice-integration ,我們整合了包括閘道器、auth許可權服務和backend服務。提供了一套微服務架構下,閘道器服務路由、鑑權和授權認證的專案案例。整個專案的架構圖如下:
具體參見:微服務架構中整合閘道器、許可權服務 。本文將以該專案中的Zuul閘道器升級作為示例。
Zuul閘道器
在該專案中,Zuul閘道器的主要功能為路由轉發、鑑權授權和安全訪問等功能。
Zuul中,很容易配置動態路由轉發,如:
zuul: ribbon: eager-load: enabled: true#zuul飢餓載入 host: maxTotalConnections: 200 maxPerRouteConnections: 20 routes: user: path: /user/** ignoredPatterns: /consul serviceId: user sensitiveHeaders: Cookie,Set-Cookie
預設情況下,Zuul在請求路由時,會過濾HTTP請求頭資訊中的一些敏感資訊,這裡我們不過多介紹。
閘道器中還配置了請求的鑑權,結合Auth服務,通過Zuul自帶的Pre過濾器可以實現該功能。當然還可以利用Post過濾器對請求結果進行適配和修改等操作。
除此之外,還可以配置限流過濾器和斷路器,下文中將會增加實現這部分功能。
遷移到Spring Cloud Gateway
筆者新建了一個gateway-enhanced
的專案,因為變化很大,不適合在之前的gateway
專案基礎上修改。