SpringCloud微服務專案實戰 - API閘道器Gateway詳解實現

碼農大哥發表於2020-08-27

前面講過zuul的閘道器實現,那為什麼今天又要講Spring Cloud Gateway呢?原因很簡單。就是Spring Cloud已經放棄Netflix Zuul了。現在Spring Cloud中引用的還是Zuul 1.x版本,而這個版本是基於過濾器的,是阻塞IO,不支援長連線。Zuul 2.x版本跟1.x的架構大一樣,效能也有所提升。既然Spring Cloud已經不再整合Zuul 2.x了,那麼我今天也就再講解一下Spring Cloud Gateway了。

SpringCloud微服務專案實戰 - API閘道器Gateway詳解實現

1. API閘道器

API閘道器是一個伺服器,是系統的唯一入口。從物件導向設計的角度看,它與外觀模式類似。API閘道器封裝了系統內部架構,為每個客戶端提供一個定製的API。它可能還具有其它職責,如身份驗證、監控、負載均衡、快取、請求分片與管理、靜態響應處理。API閘道器方式的核心要點是,所有的客戶端和消費端都通過統一的閘道器接入微服務,在閘道器層處理所有的非業務功能。通常,閘道器也是提供REST/HTTP的訪問API。

閘道器應當具備以下功能:

  • 效能:API高可用,負載均衡,容錯機制。

  • 安全:許可權身份認證、脫敏,流量清洗,後端簽名(保證全鏈路可信呼叫),黑名單(非法呼叫的限制)。

  • 日誌:日誌記錄(spainid,traceid)一旦涉及分散式,全鏈路跟蹤必不可少。

  • 快取:資料快取。

  • 監控:記錄請求響應資料,api耗時分析,效能監控。

  • 限流:流量控制,錯峰流控,可以定義多種限流規則。

  • 灰度:線上灰度部署,可以減小風險。

  • 路由:動態路由規則。

2,SpringCloud Gateway 特徵

SpringCloud官方,對SpringCloud Gateway 特徵介紹如下:

(1)基於 Spring Framework 5,Project Reactor 和 Spring Boot 2.0

(2)整合 Hystrix 斷路器

(3)整合 Spring Cloud DiscoveryClient

(4)Predicates 和 Filters 作用於特定路由,易於編寫的 Predicates 和 Filters

(5)具備一些閘道器的高階功能:動態路由、限流、路徑重寫

從以上的特徵來說,和Zuul的特徵差別不大。SpringCloud Gateway和Zuul主要的區別,還是在底層的通訊框架上。

簡單說明一下上文中的三個術語:

**1)Filter(過濾器)**:

和Zuul的過濾器在概念上類似,可以使用它攔截和修改請求,並且對上游的響應,進行二次處理。過濾器為org.springframework.cloud.gateway.filter.GatewayFilter類的例項。

**2)Route(路由)**:

閘道器配置的基本組成模組,和Zuul的路由配置模組類似。一個Route模組由一個 ID,一個目標 URI,一組斷言和一組過濾器定義。如果斷言為真,則路由匹配,目標URI會被訪問。

**3)Predicate(斷言)**:

這是一個 Java 8 的 Predicate,可以使用它來匹配來自 HTTP 請求的任何內容,例如 headers 或引數。斷言的輸入型別是一個 ServerWebExchange。

3,搭建配置

首先我們基於之前的演示專案,再建立一個gateway-service模組,新增依賴:

SpringCloud微服務專案實戰 - API閘道器Gateway詳解實現

然後建立啟動類:

SpringCloud微服務專案實戰 - API閘道器Gateway詳解實現

配置Gateway路由資訊:

1,通過yml配置實現

SpringCloud微服務專案實戰 - API閘道器Gateway詳解實現

2,通過程式碼實現,在啟動類裡建立Route例項的配置類GatewayRoutes

SpringCloud微服務專案實戰 - API閘道器Gateway詳解實現

然後啟動服務測試,按順序啟動,依次啟動eureka-server、customer-service、order-service、gateway-service。然後登入eureka客戶端。

SpringCloud微服務專案實戰 - API閘道器Gateway詳解實現

所有服務正常啟動,請求介面測試。

1,測試customer服務介面

SpringCloud微服務專案實戰 - API閘道器Gateway詳解實現

2,測試order服務介面

SpringCloud微服務專案實戰 - API閘道器Gateway詳解實現

今天由於時間關係,先說到這裡,接下來會繼續詳細講一些配置,熔斷、限流、監控等系列內容。以及redis、MQ等接入應用。

推薦閱讀:

SpringCloud微服務專案實戰 - 閘道器zuul詳解及搭建

SpringCloud微服務專案實戰 - 微服務呼叫詳解(附面試題)

SpringCloud微服務專案實戰,服務註冊與發現(附面試題)

Spring Cloud微服務專案實戰--Eureka服務搭建

掃碼關注公眾號,傳送關鍵詞獲取相關資料:

  1. 發“Springboot”領取電商專案實戰原始碼;

  2. 發“SpringCloud”領取學習實戰資料;

SpringCloud微服務專案實戰 - API閘道器Gateway詳解實現

相關文章