Retry GatewayFilter 工厂

Retry GatewayFilter 工厂支持以下参数

  • retries:应尝试的重试次数。

  • statuses:应重试的 HTTP 状态码,使用 org.springframework.http.HttpStatus 表示。

  • methods:应重试的 HTTP 方法,使用 org.springframework.http.HttpMethod 表示。

  • series:要重试的状态码系列,使用 org.springframework.http.HttpStatus.Series 表示。

  • exceptions:应重试的抛出异常列表。

  • backoff:为重试配置的指数退避。重试在退避间隔 firstBackoff * (factor ^ n) 之后执行,其中 n 是迭代次数。如果配置了 maxBackoff,则应用的最大退避限制为 maxBackoff。如果 basedOnPreviousValue 为 true,则退避通过使用 prevBackoff * factor 计算。

  • jitter:为重试配置的随机抖动。在 [backoff - backoff*randomFactor, backoff + backoff*randomFactor] 之间生成退避

  • timeout:为重试配置的超时。

如果启用,Retry 过滤器配置了以下默认值

  • retries:三次

  • series:5XX 系列

  • methods:GET 方法

  • exceptionsIOExceptionTimeoutException

  • backoff:已禁用

  • jitter:已禁用

  • timeout:无限制

以下列表配置了一个 Retry GatewayFilter

application.yml
spring:
  cloud:
    gateway:
      routes:
      - id: retry_test
        uri: https://: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
            jitter:
              randomFactor: 0.5
            timeout: 100ms
当使用重试过滤器和以 forward: 为前缀的 URL 时,应仔细编写目标端点,以便在发生错误时,它不会执行任何可能导致响应发送到客户端并提交的操作。例如,如果目标端点是带注解的控制器,则目标控制器方法不应返回带有错误状态码的 ResponseEntity。相反,它应该抛出 Exception 或发出错误信号(例如,通过 Mono.error(ex) 返回值),重试过滤器可以配置为通过重试来处理这些错误。
使用重试过滤器时,它将重试其之后的所有过滤器。请确保重试过滤器之后执行的过滤器的结果在多次执行时符合预期。
当使用重试过滤器和任何带请求体的 HTTP 方法时,请求体将被缓存,并且网关将受到内存限制。请求体缓存在由 ServerWebExchangeUtils.CACHED_REQUEST_BODY_ATTR 定义的请求属性中。对象的类型是 org.springframework.core.io.buffer.DataBuffer

可以使用单个 statusmethod 添加简化的“快捷方式”表示法。

以下两个示例是等效的

application.yml
spring:
  cloud:
    gateway:
      routes:
      - id: retry_route
        uri: https://example.org
        filters:
        - name: Retry
          args:
            retries: 3
            statuses: INTERNAL_SERVER_ERROR
            methods: GET
            backoff:
              firstBackoff: 10ms
              maxBackoff: 50ms
              factor: 2
              basedOnPreviousValue: false
            jitter:
              randomFactor: 0.5
            timeout: 100ms

      - id: retryshortcut_route
        uri: https://example.org
        filters:
        - Retry=3,INTERNAL_SERVER_ERROR,GET,10ms,50ms,2,false,0.5,100ms
© . This site is unofficial and not affiliated with VMware.