0、Gateway基本知識
-
Gateway 是在 Spring 生態系統之上構建的 API 網關服務,基于 Spring ,Spring Boot 和 Project?Reactor 等技術。
-
Gateway 旨在提供一種簡單而有效的方式來對 API 進行路由,以及提供一些強大的過濾器功能,例如∶熔斷、限流、重試等。
官網:
https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/
先認識網關:
在沒有網關服務之前:
有了網關服務之后:
網關服務核心功能?
-
??統一調用接口??
- 對外提供統一入口,根據請求URL路徑轉發到對應的后端服務
- ??配置化路由??:通過配置即可實現斷言(匹配規則)和過濾
-
??流量治理與安全??
- 負載均衡(商品服務集群多實例場景)
- 限流(防止刷接口)
- 熔斷(服務異常時快速失敗)
- 鑒權(攔截非法請求)
- 日志監控
- 反向代理
1、網絡拓撲圖
?
2、Gateway 和 Zuul 區別?
- SpringCloud Gateway 作為 Spring Cloud 生態系統中的網關,目標是替代 Zuul
- SpringCloud Gateway 是基于 Spring WebFlux 框架實現的
- Spring WebFlux 框架底層則使用了高性能的 Reactor 模式通信框架 Netty , 提升了網關性能
3、Gateway 特性
Spring Cloud Gateway 基于 Spring Framework(支持 Spring WebFlux),Project Reactor 和 Spring Boot 進行構建,具有如下特性:
- 動態路由:根據url動態的決定調用的哪個遠程地址
- 可以對路由指定 Predicate(斷言)和Filter(過濾器):判斷這個請求能不能處理,過濾器用于在請求被路由到后端服務 ??前(Pre)?? 或 ??后(Post)?? 對請求或響應進行修改或增強。
- 集成Hystrix的斷路器功能:熔斷
- 集成 Spring Cloud 服務發現功能:從 Eureka Server 獲取遠程Service地址
- 請求限流功能:
- 支持路徑重寫:根據業務需求進行重寫
?4、Gateway 核心組件
1、Route(路由):
路由是構建網關的基本模塊,它由 ID,目標 URI,一系列的斷言和過濾器組成,如果斷言為 true 則匹配該路由
2、Predicate(斷言):?
對 HTTP 請求中的所有內容(例如請求頭或請求參數)進行匹配,如果請求與斷言相匹配則進行路由。
簡單舉例, 比如配置路徑,?? - Path=/member/get/**? ==>斷言:路徑相匹配的進行路由轉發, 如果Http請求的路徑不匹配, 則不進行路由轉發.
3、filters(過濾器):
使用過濾器,可以在請求被路由前或者之后對請求進行處理
你可以理解成, 在對 Http 請求斷言匹配成功后, 可以通過網關的過濾機制, 對 Http 請求處理
簡單舉例:
- AddRequestParameter=color, blue #過濾器在匹配的請求頭加上一對請求頭,名稱為color 值為blue, 比如原來的http 請求是 http://localhost:10000/member/get/1
==過濾器處理=> 統一攜帶參數:http://localhost:10000/member/get/1?color=blue
5、流程梳理?
-
客戶端向 Spring Cloud Gateway 發出請求。然后在 Gateway Handler Mapping 中找到與請求相匹配的路由,將其發送到 Gateway Web Handler。
-
Handler 再通過指定的過濾器鏈來將請求發送到我們實際的服務執行業務邏輯,然后返回。
-
過濾器之間用虛線分開是因為過濾器可能會在發送代理請求之前("pre")或之后("post")執行業務邏輯。
-
Filter 在"pre"類型的過濾器可以做參數校驗、權限校驗、流量監控、日志輸出、協議轉換等
-
在"post"類型的過濾器中可以做響應內容、響應頭的修改,日志的輸出,流量監控等有著非常重要的作用。
紅色方框為一個過濾器?
一句話說:路由轉發+執行過濾器鏈
路由轉發=發送到后端服務之前=‘pre’執行過后
6、其他
后續服務網關代替消費端,被視為Erueka Client