一、Spring Cloud Gateway 簡介
Spring Cloud Gateway 系列目錄設計模式
Spring Cloud Gateway(一):認識Spring Cloud Gateway
Spring Cloud Gateway(二):Spring Cloud Gateway整合Eureka應用
Spring Cloud Gateway(三):網關處理器
Spring Cloud Gateway(四):路由定義定位器 RouteDefinitionLocator
Spring Cloud Gateway(五):路由定位器 RouteLocator
Spring Cloud Gateway(六):路由謂詞工廠 RoutePredicateFactory
Spring Cloud Gateway(七):路由謂詞工廠WeightRoutePredicateFactory
Spring Cloud Gateway(八):其它路由謂詞工廠
Spring Cloud Gateway(九):網關過濾器 GatewayFilter
Spring Cloud Gateway(十):網關過濾器工廠 GatewayFilterFactoryapi
1.一、Spring Cloud Gateway 是什麼
Spring Cloud Gateway 基於 Spring Boot 2, 是 Spring Cloud 的 全新 項目, 該項 目 提供 了 一個 構建 在 Spring 生態 之上 的 API 網關, 包括 Spring 五、 Spring Boot 2 和 Project Reactor。 Spring Cloud Gateway 旨在 提供 一種 簡單 而 有效 的 途徑 來 轉發 請求, 併爲 它們 提供 橫 切 關注 點, 例如: 安全性、 監控/ 指標 和 彈性。安全
1.二、Spring Cloud Gateway 特性
- 基於 Java 8 編碼;
- 基於Spring Framework 5,Project Reactor和Spring Boot 2.0構建
- 支持動態路由,可以匹配任何請求屬性上的路由。
- 支持 內置 到 Spring Handler 映射 中的 路 由 匹配;
- 支持 基於 HTTP 請求 的 路 由 匹配( Path、 Method、 Header、 Host 等);
- 集成了Hystrix斷路器
- 過濾器 做用於 匹配 的 路 由;
- 過濾器能夠修改 HTTP 請求和HTTP 響應( 增長/ 修改 頭部、 增長/ 修改 請求 參數、 改寫 請求 路徑 等);
- 支持 Spring Cloud DiscoveryClient 配置路由,與服務發現與註冊配合使用。
- 支持限流
- 支持地址重寫
1.三、Spring Cloud Gateway 詞彙
Route(路由): 路由網關的基本構建塊。 它由ID,目標URI,謂詞集合和過濾器集合定義。 若是聚合謂詞爲真,則匹配路由。架構
Predicate: 這是一個Java 8函數謂詞。 輸入類型是Spring Framework ServerWebExchange。 這容許開發人員匹配HTTP請求中的任何內容,例如標頭或參數。app
Filter: 這些是使用特定工廠構建的Spring Framework GatewayFilter實例。 這裏,能夠在發送下游請求以前或以後修改請求和響應。函數
二、Spring Cloud Gateway 與 Zuul的區別
在 Finchley 正式版以前,Spring Cloud 推薦的網關是 Netflix 提供的Zuul:post
一、Zuul 1.x,是一個基於阻塞 I/ O 的 API Gateway性能
二、Zuul 1.x 基於Servlet 2. 5,使用阻塞架構,它不支持任何長鏈接,如 WebSocket。 Zuul 的設計模式和Nginx較像,每次 I/ O 操做都是從工做線程中選擇一個執行,請求線程被阻塞到工做線程完成,可是差異是Nginx 用C++ 實現,Zuul 用 Java 實現,而 JVM 自己會有第一次加載較慢的狀況,使得Zuul 的性能相對較差。測試
三、Zuul 2.x,基於 Netty 非阻塞、支持長鏈接,但 Spring Cloud 目前尚未整合。 Zuul 2.x的性能較 Zuul 1.x 有較大提高。在性能方面,根據官方提供的基準測試, Spring Cloud Gateway 的 RPS(每秒請求數)是Zuul 的 1. 6 倍。編碼
四、Spring Cloud Gateway 創建 在 Spring Framework 五、 Project Reactor 和 Spring Boot 2 之上, 使用 非 阻塞 API。
五、Spring Cloud Gateway 還 支持 WebSocket, 而且 與 Spring 緊密 集成, 擁有 更好 的 開發 體驗
三、Spring Cloud Gateway 工做流程
客戶端向 Spring Cloud Gateway 發出請求。而後在 Gateway Handler Mapping 中找到與請求相匹配的路由,將其發送到 Gateway Web Handler。Handler 再經過指定的過濾器鏈來將請求發送到咱們實際的服務執行業務邏輯,而後返回。
過濾器之間用虛線分開是由於過濾器可能會在發送代理請求以前(「pre」)或以後(「post」)執行業務邏輯。
四、Spring Cloud Gateway 默認路由規則
路由格式: http://GATEWAY_HOST:GATEWAY_PORT/UPPER_SERVICEID/** 事例: http://localhost:9000/EUREKA-CLIENT@192.168.1.101@8000/api/users
- GATEWAY_HOST:網關主機
- GATEWAY_PORT:網關端口
- UPPER_SERVICEID:應用在註冊中心的惟一serviceId,默認大寫訪問,同時serviceId中不要包含【/】
備註: Spring Cloud Gateway須要Spring Boot和Spring Webflux提供的Netty運行時。 它不能在傳統的Servlet容器中工做或構建爲WAR。