一、為什麼選擇SpringCloud Gateway而不是Zuul?
Gateway和Zuul的職責一樣,都承擔著請求分發,類似Nginx分發到後端伺服器。
1.SpingCloud Gateway 和SpringCloud Zuul對比分析
(1)相同點
- 底層都是servlet
- 兩者均是web閘道器,處理的是http請求
(2)不同點
a.內部實現
gateway對比zuul多依賴了spring-webflux,在spring的支援下,功能更強大,內部實現了限流、負載均衡等,擴充套件性也更強,但同時也限制了僅適合於Spring Cloud套件;
zuul則可以擴充套件至其他微服務框架中,其內部沒有實現限流、負載均衡等。
b.是否支援非同步
zuul僅支援同步;
gateway支援非同步(理論上gateway則更適合於提高系統吞吐量(但不一定能有更好的效能),最終效能還需要通過嚴密的壓測來決定)。
c.框架設計的角度
gateway具有更好的擴充套件性,並且其已經發布了2.0.0的RELESE版本,穩定性也是非常好的。
d.效能
Zuul和Gateway哪個效能更好,有朋友特別做了測試並寫下了文章:
微服務閘道器選型:spring cloud gateway、zuul 1效能對比測試
e.限流
Zuul2:可通過配置檔案或者filter實現;
Gateway:可對IP、使用者、叢集進行限流,並提供擴充套件介面。
f.鑑權
Zuul2:filter中程式碼實現;
Gateway:普通鑑權、auth2.0。
g.監控
Zuul2:filter中程式碼實現;
Gateway:Gateway Metrics Filter實現。
h.易用性
Zuul2:參考較少;
Gateway:簡單易用。
(3)架構圖
a.Zuul2內部架構圖
b.Gateway內部架構圖
2.究竟該選Gateway還是Zuul?
我的看法是結合業務場景和實際情況。比方說,如果是一個新的專案可以採用Gateway,如果是二次開發某個專案,而那個專案閘道器用的是Zuul,建議不要改,保持現狀,直到真正搞懂了那個專案和框架底層,可以嘗試試驗換(最終換不換在於換的成本有多高,如果太高的話,還是不要換)。
二、SpringCloud整合Gateway
1.匯入Maven依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency>
2.配置檔案
server:
port: 8080
spring:
cloud:
gateway:
discovery:
locator:
lowerCaseServiceId: true
enabled: true
routes:
# 認證中心
- id: blog-api
uri: lb://blog-api
predicates:
- Path=/api/**
filters:
- StripPrefix=1
application:
name: blog-gateway-server
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
3.啟動並測試
整合其實非常簡單,關鍵在於兩個:
第一,SpringCloud和SpringBoot版本要相容;
第二,配置檔案要對,否則會遇到這樣的問題,能夠正常啟動,但是通過閘道器訪問不到下面的微服務。
如果有朋友對Zuul感興趣,可以參考我的這篇文章:
SpringCloud之Zuul
本文參考資料如下:
微服務閘道器Zuul和Gateway的區別
SpringCloud Gateway 新閘道器與zuul的對比選型
微服務閘道器選型:spring cloud gateway、zuul 1效能對比測試
Zuul和Gateway對比