SpringCloud微服務項目實戰 – API網關Gateway詳解實現

  • 2020 年 8 月 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了。

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模塊,添加依賴:

然後創建啟動類:

配置Gateway路由信息:

1,通過yml配置實現

2,通過代碼實現,在啟動類里創建Route實例的配置類GatewayRoutes

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

所有服務正常啟動,請求接口測試。

1,測試customer服務接口

2,測試order服務接口

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

推薦閱讀:

SpringCloud微服務項目實戰 – 網關zuul詳解及搭建

SpringCloud微服務項目實戰 – 微服務調用詳解(附面試題)

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

Spring Cloud微服務項目實戰–Eureka服務搭建

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

  1. 發「Springboot」領取電商項目實戰源碼;

  2. 發「SpringCloud」領取學習實戰資料;