Spring Cloud Gateway 是 Spring Cloud 的一個全新項(xiàng)目,該項(xiàng)目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技術(shù)開發(fā)的網(wǎng)關(guān),它旨在為微服務(wù)架構(gòu)提供一種簡單有效的統(tǒng)一的 API 路由管理方式。
Spring Cloud Gateway 作為 Spring Cloud 生態(tài)系統(tǒng)中的網(wǎng)關(guān),目標(biāo)是替代 Netflix Zuul,其不僅提供統(tǒng)一的路由方式,并且基于 Filter 鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全,監(jiān)控/指標(biāo),和限流。
相關(guān)概念:
Route(路由):這是網(wǎng)關(guān)的基本構(gòu)建塊。它由一個 ID,一個目標(biāo) URI,一組斷言和一組過濾器定義。如果斷言為真,則路由匹配。
Predicate(斷言):這是一個 Java 8 的 Predicate。輸入類型是一個 ServerWebExchange。我們可以使用它來匹配來自 HTTP 請求的任何內(nèi)容,例如 headers 或參數(shù)。
Filter(過濾器):這是org.springframework.cloud.gateway.filter.GatewayFilter的實(shí)例,我們可以使用它修改請求和響應(yīng)。
工作流程:

客戶端向 Spring Cloud Gateway 發(fā)出請求。如果 Gateway Handler Mapping 中找到與請求相匹配的路由,將其發(fā)送到 Gateway Web Handler。Handler 再通過指定的過濾器鏈來將請求發(fā)送到我們實(shí)際的服務(wù)執(zhí)行業(yè)務(wù)邏輯,然后返回。 過濾器之間用虛線分開是因?yàn)檫^濾器可能會在發(fā)送代理請求之前(“pre”)或之后(“post”)執(zhí)行業(yè)務(wù)邏輯。
Spring Cloud Gateway 的特征:
基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
動態(tài)路由
Predicates 和 Filters 作用于特定路由
集成 Hystrix 斷路器
集成 Spring Cloud DiscoveryClient
易于編寫的 Predicates 和 Filters
限流
路徑重寫
Spring Cloud Gateway 與 Zuul的區(qū)別:
1、Zuul 1.x,是一個基于阻塞 I/ O 的 API Gateway
2、Zuul 1.x 基于Servlet 2. 5,使用阻塞架構(gòu),它不支持任何長連接,如 WebSocket。 Zuul 的設(shè)計(jì)模式和Nginx較像,每次 I/ O 操作都是從工作線程中選擇一個執(zhí)行,請求線程被阻塞到工作線程完成,但是差別是Nginx 用C++ 實(shí)現(xiàn),Zuul 用 Java 實(shí)現(xiàn),而 JVM 本身會有第一次加載較慢的情況,使得Zuul 的性能相對較差。
3、Zuul 2.x,基于 Netty 非阻塞、支持長連接,但 Spring Cloud 目前還沒有整合。 Zuul 2.x的性能較 Zuul 1.x 有較大提升。在性能方面,根據(jù)官方提供的基準(zhǔn)測試, Spring Cloud Gateway 的 RPS(每秒請求數(shù))是Zuul 的 1. 6 倍。
4、Spring Cloud Gateway 建立 在 Spring Framework 5、 Project Reactor 和 Spring Boot 2 之上, 使用非阻塞 API。
5、Spring Cloud Gateway 還 支持 WebSocket, 并且 與 Spring 緊密集成, 擁有更好的開發(fā)體驗(yàn)。
電子商務(wù)社交平臺源碼請加企鵝求求:三五三六二四七二五九