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

前面講過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”領取學習實戰資料;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章