gateway predicate

CyrusHuang發表於2024-09-05
spring:
  cloud:
    gateway:
      routes:
        - id: test_my_provider # 自定義,全域性唯一即可
          uri: http://localhost:8081 # 實際呼叫的地址
          predicates:
            - Path=/test/** # 請求匹配規則
        - id: test_my_consumer
          uri: http://localhost:8082
          predicates:
            - Path=/feign/**

上一篇文章 gateway 快速入門的配置檔案如上,uri 中 ip 和 port 寫死的,請求最終會到具體的某個節點,如果多節點部署,直接G

多節點 uri

8081 對應服務是 my-test-provider,8082 對應的服務是 my-test-consumer,如下改動即可

- id: test_my_provider 
  uri: lb://my-test-provider # 服務名代替 ip+port
  predicates:
    - Path=/test/**
- id: test_my_consumer
  uri: lb://my-test-consumer # 服務名代替 ip+port
  predicates:
    - Path=/feign/**

predicates 更多用法

前面 predicates 只是配了一個 Path,表示匹配 url,還能增加判斷規則,即使能找到 url,也要滿足條件才能呼叫,預設的有 12 種

gateway predicate
  1. 時間判斷

    1. BeforeRoutePredicateFactory、AfterRoutePredicateFactory、BetweenRoutePredicateFactory

    2. 指定時間之前、指定時間之後、時間範圍內(如果是範圍英文逗號分隔,start,end)

    3. 值是 ZonedDateTime 決定的

      public static void main(String[] args) {
          System.out.println(ZonedDateTime.now());
      }
      
      // 2024-07-15T21:41:48.868923400+08:00[Asia/Shanghai]
      
    4. 比如電商系統某個商品限時搶購,2024-07-13 一整天

      - id: flash-sale-promotion 
        uri: lb://my-test-provider # 服務名代替 ip+port
        predicates:
          - Path=/onsale/**
          - Between=2024-07-13T00:00:00+08:00[Asia/Shanghai],2024-07-14T00:00:00+08:00[Asia/Shanghai]
      
  2. cookie 判斷

    - id: flash-sale-promotion 
      uri: lb://my-test-provider # 服務名代替 ip+port
      predicates:
        - Path=/onsale/**
        - Between=2024-07-13T00:00:00+08:00[Asia/Shanghai],2024-07-14T00:00:00+08:00[Asia/Shanghai]
        - Cookie=username,zhangsan # 請求中必須有 username = zhangsan 的 cookie,後面其實是個政策表示式
    
  3. header 請求頭判斷

    - id: flash-sale-promotion 
      uri: lb://my-test-provider # 服務名代替 ip+port
      predicates:
        - Path=/onsale/**
        - Between=2024-07-13T00:00:00+08:00[Asia/Shanghai],2024-07-14T00:00:00+08:00[Asia/Shanghai]
        - Cookie=username,zhangsan
        - Header=userage,\d+ # 請求頭必須有 userage,並且值是正整數
    
  4. Path,前面用了很多了,就是透過 url 判斷是否符合

  5. Query,請求必須帶有某個 QueryString 才可以(get 請求?xx=xx&xx=xx)

  6. RemoteAddr,IP 限制,符合的 IP 才能訪問

  7. Method,請求方式限制,只能符合的才能訪問,GET、POST、PUT ...

自定義判斷規則

相關文章