SpringCloud Gateway 是 Spring Cloud 的一個全新項目六水,該項目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技術(shù)開發(fā)的網(wǎng)關(guān)皆疹,它旨在為微服務架構(gòu)提供一種簡單有效的統(tǒng)一的 API 路由管理方式殉簸。
SpringCloud Gateway 作為 Spring Cloud 生態(tài)系統(tǒng)中的網(wǎng)關(guān)魄梯,目標是替代 Zuul,在Spring Cloud 2.0以上版本中恰梢,沒有對新版本的Zuul 2.0以上最新高性能版本進行集成佛南,仍然還是使用的Zuul 2.0之前的非Reactor模式的老版本。而為了提升網(wǎng)關(guān)的性能删豺,SpringCloud Gateway是基于WebFlux框架實現(xiàn)的共虑,而WebFlux框架底層則使用了高性能的Reactor模式通信框架Netty。
Spring Cloud Gateway 的目標呀页,不僅提供統(tǒng)一的路由方式妈拌,并且基于 Filter 鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全蓬蝶,監(jiān)控/指標尘分,和限流。
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)具備一些網(wǎng)關(guān)的高級功能:動態(tài)路由缓窜、限流定续、路徑重寫
從以上的特征來說,和Zuul的特征差別不大禾锤。SpringCloud Gateway和Zuul主要的區(qū)別私股,還是在底層的通信框架上。
簡單說明一下上文中的三個術(shù)語:
(1)Filter(過濾器):
和Zuul的過濾器在概念上類似恩掷,可以使用它攔截和修改請求倡鲸,并且對上游的響應,進行二次處理黄娘。過濾器為org.springframework.cloud.gateway.filter.GatewayFilter類的實例峭状。
(2)Route(路由):
網(wǎng)關(guān)配置的基本組成模塊克滴,和Zuul的路由配置模塊類似。一個Route模塊由一個 ID优床,一個目標 URI劝赔,一組斷言和一組過濾器定義。如果斷言為真胆敞,則路由匹配望忆,目標URI會被訪問。
(3)Predicate(斷言):
這是一個 Java 8 的 Predicate竿秆,可以使用它來匹配來自 HTTP 請求的任何內(nèi)容,例如 headers 或參數(shù)稿壁。斷言的輸入類型是一個 ServerWebExchange幽钢。
啟動Gateway
1.配置pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
通過配置文件配置路由規(guī)則
server:
port: 7999
spring:
application:
name: api-gateway
cloud:
gateway:
discovery:
locator:
enabled: true
lower-case-service-id: true
routes:
- id: gateway-service
uri: http://localhost:8083/testCallOrder
predicates:
- Path=/testCallOrder
測試
訪問http://localhost:7999/testCallOrder,會轉(zhuǎn)發(fā)到 localhost:8083/testCallOrder