Spring Cloud 重试GatewayFilter工厂
2024-01-05 17:37 更新
Retry
GatewayFilter Factory支持以下参数集:
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
计算退避。
如果启用了Retry
过滤器,则会配置以下默认值:
retries
-3次series
— 5XX系列methods
— GET方法exceptions
-IOException
和TimeoutException
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的重试过滤器时,应仔细编写目标端点,以便在发生错误的情况下不会执行任何可能导致响应发送到客户端并提交的操作。例如,如果目标端点是带注释的控制器,则目标控制器方法不应返回带有错误状态代码的ResponseEntity
。相反,它应该抛出一个Exception
,或者例如通过一个Mono.error(ex)
返回值来发出错误信号,可以将重试过滤器配置为通过重试来处理。
当将重试过滤器与任何具有主体的HTTP方法一起使用时,主体将被缓存,并且网关将受到内存的限制。正文被缓存在ServerWebExchangeUtils.CACHED_REQUEST_BODY_ATTR
定义的请求属性中。对象的类型是org.springframework.core.io.buffer.DataBuffer
。
以上内容是否对您有帮助:
更多建议: