前面講過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服務搭建
掃碼關注公眾號,發送關鍵詞獲取相關資料:
-
發“Springboot”領取電商項目實戰源碼;
-
發“SpringCloud”領取學習實戰資料;
