簡述
相信通過微服務應用開發入門①web端架構演進的閱讀,大家已經知道服務網關是幹嘛的;
一般來說服務網關會做以下幾件事情:
- 路由:路由是API網關很核心的模塊功能,此模塊實現根據請求,鎖定目標微服務並將請求進行轉發
- 鑑權:權限身份認證
- 監控:記錄請求響應數據,api耗時分析,性能監控。
- 日誌:日誌記錄。
- 限流:實現微服務訪問流量計算,基於流量計算分析進行限流,可以定義多種限流規則。
Spring Cloud Gateway
在SpringBoot1.x的版本中,一般來說用Netflix公司的zuul;(對又是netflix、Netflix是SpringCloud的開源組件大戶)
但是在SpirngBoot2.x的發佈後,zuul2.x的版本閉源,於是Spring團隊有開發了gateway這個網關;
關於相關的資訊,以及註冊中心、服務網關選型參考之前的博客SpingCloud資訊-斷路器、註冊中心、網關
一般來說: 內部請求通過feign和ribbon進行訪問 (這個在之前的文章微服務應用開發入門③微服務組件eureka、ribbon、feign和hystrix初識有介紹)
外部請求通過gateway做統一的路由
1.當請求到達gateway,首先Gateway Handler Mapping會判斷請求是否匹配
2.如果不匹配404
3.如果匹配將其發送Gateway web handler處理。
4.Gateway web handler處理請求時會經過一系列的過濾器鏈;
類似zuul,在執行所有“pre”過濾器邏輯時,往往進行了鑑權、限流、日誌輸出等功能,以及請求頭的更改、協議的轉換;轉發之後收到響應之後,會執行所有“post”過濾器的邏輯,在這裏可以響應數據進行了修改,比如響應頭、協議的轉換等。
簡單應用
Predicates
Gateway Handler Mapping中用到一個概念叫Predicates,用斷言來判斷請求是否匹配;
Gateway爲我們提供的斷言有:時間斷言、cookie斷言、header斷言、host斷言、方法類型斷言、路徑斷言等
一般我們會用到路徑斷言或者header斷言;當然可以自定義斷言
這是項目 https://github.com/zhouxiaohei/cloud-start-demo/tree/master/cloud-gateway-demo的配置文件
大家也可以加上header斷言 ,請求頭不包含X-Request-Id並且值是123的,會404;值也可以是一個正則表達式
- Header=X-Request-Id, 123
Gateway Filter
和zuul一樣分爲pre、post、也從範圍上分爲單個路由和global filter;
剛纔用到了切割前綴過濾器,可以打開StripPrefixGatewayFilterFactory查看它的源碼
未完待續。。。。。