Spring Cloud 重試GatewayFilter工廠

2024-01-05 17:37 更新

Retry GatewayFilter Factory支持以下參數(shù)集:

  • retries:應嘗試重試的次數(shù)
  • statuses:應重試的HTTP狀態(tài)代碼,用org.springframework.http.HttpStatus表示
  • methods:應重試的HTTP方法,使用org.springframework.http.HttpMethod表示
  • series:要重試的一系列狀態(tài)代碼,使用org.springframework.http.HttpStatus.Series表示
  • exceptions:應重試引發(fā)的異常列表
  • backoff:為重試配置了指數(shù)補償。重試在退避間隔firstBackoff * (factor ^ n)之后執(zhí)行,其中n是迭代。如果配置了maxBackoff,則應用的最大退避將被限制為maxBackoff。如果basedOnPreviousValue為true,將使用prevBackoff * factor計算退避。

如果啟用了Retry過濾器,則會配置以下默認值:

  • retries-3次
  • series — 5XX系列
  • methods — GET方法
  • exceptions-IOExceptionTimeoutException
  • backoff-已禁用

application.yml。 

spring:
  cloud:
    gateway:
      routes:
      - id: retry_test
        uri: http://localhost:8080/flakey
        predicates:
        - Host=*.retry.com
        filters:
        - name: Retry
          args:
            retries: 3
            statuses: BAD_GATEWAY
            methods: GET,POST
            backoff:
              firstBackoff: 10ms
              maxBackoff: 50ms
              factor: 2
              basedOnPreviousValue: false
當使用帶有forward:前綴URL的重試過濾器時,應仔細編寫目標端點,以便在發(fā)生錯誤的情況下不會執(zhí)行任何可能導致響應發(fā)送到客戶端并提交的操作。例如,如果目標端點是帶注釋的控制器,則目標控制器方法不應返回帶有錯誤狀態(tài)代碼的ResponseEntity。相反,它應該拋出一個Exception,或者例如通過一個Mono.error(ex)返回值來發(fā)出錯誤信號,可以將重試過濾器配置為通過重試來處理。
當將重試過濾器與任何具有主體的HTTP方法一起使用時,主體將被緩存,并且網(wǎng)關將受到內(nèi)存的限制。正文被緩存在ServerWebExchangeUtils.CACHED_REQUEST_BODY_ATTR定義的請求屬性中。對象的類型是org.springframework.core.io.buffer.DataBuffer。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號