You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring WebClient如何配置不同重试次数对应不同延迟的重试策略

结论

fixedBackoff(固定退避策略)无法实现分档差异化重试延迟需求。该策略的设计目标就是为所有重试请求配置统一的间隔时长,原生不支持按重试次序设置不同延迟,不需要再尝试基于它做改造。

实现代码

直接替换原有固定退避配置为自定义分档退避逻辑即可,你已经注入的三个分档时长配置、异常匹配规则、最大重试次数、重试日志逻辑都可以直接复用:

public MyService(WebClient client,
            @Value("${retry.quantity}") int retries,
            @Value("${retry.time.first}") int firstTime,
            @Value("${retry.time.second}") int secondTime,
            @Value("${retry.time.rest}") int restTime) 
{
        this.client = client;
        this.customRetry = Retry.anyOf(ResponseException.class)
                .retryMax(retries)
                // 自定义分档退避规则
                .backOffsFromContext(ctx -> {
                    long retryCount = ctx.iteration();
                    if (retryCount == 1) {
                        return Duration.ofMinutes(firstTime);
                    } else if (retryCount == 2) {
                        return Duration.ofMinutes(secondTime);
                    } else {
                        return Duration.ofMinutes(restTime);
                    }
                })
                .doOnRetry(exception ->
                    log.error("Exception on Retry is {} .", exception)
                );
}
注意事项
  • 重试上下文中的iteration()计数从1开始,和你定义的「第一次/第二次/第三次及后续」的分档规则完全匹配,不需要额外做偏移计算
  • 代码中默认用Duration.ofMinutes做时间转换,如果你的配置项单位是秒,替换成Duration.ofSeconds即可,和实际配置单位保持一致
  • 后续如果要调整分档数量、各档延迟时长,只需要修改配置和对应分支判断逻辑即可,不需要改动整体重试框架

内容的提问来源于stack exchange,提问作者Richi101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 12:01:05