首頁>技術>

官網上給出的Spring Cloud Gateway特性如下圖所示:

翻譯過來就是:

基於 Spring Framework 5 ,Project Reactor 以及 Spring Boot 2.0 構建路由能夠匹配任何請求屬性Predicates和Filters可以區分路由生效集成了斷路器繼承了Spring Cloud DiscoveryClient輕鬆編寫Predicates和Filters請求流控路徑重寫

透過上面的圖片可以看出Spring Cloud Gateway的主要功能是由Predicate、Filter以及Route實現,同時也能看出這裡對應到了新特性裡的“Predicates和Filters可以區分路由生效”。

路由和過濾器的概念在之前Zuul閘道器的學習中也有所涉及,這裡重點學習一下Predicate:

在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性實現了各種路由匹配規則,有透過 Header、請求引數等不同的條件來進行作為條件匹配到對應的路由。網上有一張圖總結了 Spring Cloud 內建的幾種 Predicate 的實現。

圖中的謂語就是Predicate的另一種翻譯,也可以看到有很多型別的Predicate。比如說時間型別的Predicate(AfterRoutePredicateFactory、BeforeRoutePredicateFactory以及BetweenRoutePredicateFactory),當只有滿足特定時間要求的請求會進入到此Predicate中,並交由Route處理;Cookie型別的CookieRoutePredicateFactory,指定的Cookie滿足正則匹配,才會進入此Route。此外還有Host、Method、Path、Queryparam、Remoteaddr型別的Predicate,每一種Predicate都會對當前的客戶端請求進行判斷。

接下來透過一個具體的例子來感受一些Spring Cloud Gateway:

pom中新增相關依賴,由於Spring Cloud Gateway繼承了斷路器,因此也需要新增hystrix的依賴,否則會出現報錯:

<dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency>

如果啟動時有報java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/exc/InvalidDefinitionException。那是由於版本衝突,需要手動新增jackson的依賴並指定明確的版本(2.8.5以上):

<dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-core</artifactId>    <version>2.9.5</version></dependency><dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-databind</artifactId>    <version>2.9.5</version></dependency><dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-annotations</artifactId>    <version>2.9.5</version></dependency><dependency>    <groupId>com.fasterxml.jackson.module</groupId>    <artifactId>jackson-module-jaxb-annotations</artifactId>    <version>2.9.5</version></dependency>

具體的Route、Predicate、Filter等設定可以透過程式碼或者配置檔案來實現,這裡我們還是透過application.yml來實現:

server:  port: 10290spring:  application:    name: spring-cloud-gateway  cloud:    gateway:      routes:        #路由標識        - id: route-service          uri: http://127.0.0.1:10090          order: 0          predicates:            #匹配127.0.0.1:10290/provider?mode=test            - Path=/provider            - Query=mode, test #引數在轉發的過程中不會丟失          filters:            #127.0.0.1:10090/query/getServiceName?mode=test            - RewritePath=/provider, /query/getServiceName

完成上述配置後,我們啟動服務來進行驗證:

沒有問題!

8
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Python封裝機制及實現方法