springcloud組件gateway斷言(Predicate)


Spring Cloud GatewaySpringCloud的全新子項目,該項目基於Spring5.xSpringBoot2.x技術版本進行編寫,意在提供簡單方便、可擴展的統一API路由管理方式。

概念解釋:

    • Route(路由):路由是網關的基本單元,由ID、URI、一組Predicate、一組Filter組成,根據Predicate進行匹配轉發。
    • Predicate(謂語、斷言):路由轉發的判斷條件,目前SpringCloud Gateway支持多種方式,常見如:PathQueryMethodHeader等。
    • Filter(過濾器):過濾器是路由轉發請求時所經過的過濾邏輯,可用於修改請求、響應內容。

 

開始使用

Spring Cloud Gateway目前有兩種方式進行配置:

  • application.yml配置文件方式
  • 通過@Bean注解 RouteLocator 方法返回值

 


 

route的組成部分

  • id:路由的ID
  • uri:匹配路由的轉發地址
  • predicates:配置該路由的斷言,通過PredicateDefinition類進行接收配置。
  • order:路由的優先級,數字越小,優先級越高。

 

 

 


Spring Cloud Gateway Predicates

 

每一個Predicate的使用,你可以理解為:當滿足這種條件后才會被轉發,如果是多個,那就是都滿足的情況下被轉發。

 

 

 

 


Path 方式匹配轉發

我們在application.yml配置文件內添加對應的路由配置,如下所示

spring:
  application:
    name: spring-cloud-gateway-sample
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.yuqiyu.com
          predicates:
            # 匹配路徑轉發
            - Path=/api-boot-datasource-switch.html
# 端口號
server:
  port: 9090

 

在上面的配置中,當訪問http://localhost:9090/api-boot-datasource-switch.html時就會被自動轉發到http://blog.yuqiyu.com/api-boot-datasource-switch.html,這里要注意完全匹配Path的值時才會進行路由轉發

,對應的 RouteLocator方式該怎么進行配置

@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder) {
  return builder.routes()
    .route("blog", r -> 
           r.path("/api-boot-datasource-switch.html").uri("http://blog.yuqiyu.com"))
    .build();
}

id:blog path:/api-boot-datasource-switch.html
uri:http://blog.yuqiyu.com

 


Host 方式匹配轉發

Spring Cloud Gateway可以根據Host主機名進行匹配轉發,如果我們的接口只允許**.yuqiyu.com域名進行訪問,那么配置如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.yuqiyu.com
          predicates:
            - Host=**.yuqiyu.com

 

對應的 RouteLocator方式該進行配置

 @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return  builder.routes()
                .route(r -> r.host("**.yuqiyu.com")
                            .uri("http://blog.yuqiyu.com")
                            .order(1)
                            .id("blog")
                )
                .build();
    }

 

 

 


組合示例

相同的Predicate也可以配置多個,請求的轉發是必須滿足所有的Predicate后才可以進行路由轉發,組合使用示例如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.yuqiyu.com
          predicates:
            - Method=GET
            - Host=**.yuqiyu.com
            - Path=192.168.1.56/24    

 

對應的 RouteLocator方式該進行配置

@Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return  builder.routes()
                .route(r -> r.host("**.yuqiyu.com")
                            .and().path("/api-boot-datasource-switch.html")
                            .and().method("GET")
                            .uri("http://blog.yuqiyu.com")
                            .order(1)
                            .id("blog")
                )
                .build();
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM