首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以根据HttpStatus代码自定义重试模板使用的退避策略

是否可以根据HttpStatus代码自定义重试模板使用的退避策略
EN

Stack Overflow用户
提问于 2020-04-15 20:28:49
回答 1查看 92关注 0票数 0

对于需要根据状态码自动重试某些API调用的用例,我正在评估spring-retry。我可以像这样自定义重试策略

代码语言:javascript
运行
复制
@Component("httpStatusCodeRetryPolicy")
public class HttpStatusRetryPolicy extends ExceptionClassifierRetryPolicy
{
    @PostConstruct
    public void init()
    {
        SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
        this.setExceptionClassifier( new Classifier<Throwable, RetryPolicy>()
        {
            @Override
            public RetryPolicy classify(Throwable classifiable )
            {
                if ( classifiable instanceof HttpStatusCodeException)
                {
                    var exception = (HttpStatusCodeException)classifiable;
                    if(exception.getStatusCode() == HttpStatus.REQUEST_TIMEOUT){
                       retryPolicy.setMaxAttempts(3);
                    }
                    else if (exception.getStatusCode() == HttpStatus.valueOf(429) ||
                    exception.getStatusCode() == HttpStatus.valueOf(502) ||
                    exception.getStatusCode() == HttpStatus.valueOf(503) ||
                    exception.getStatusCode() == HttpStatus.valueOf(504)) {
                        retryPolicy.setMaxAttempts(4);
                    }
                    return retryPolicy;
                }
                return new NeverRetryPolicy();
            }
        });
    }
}

但是,我还想根据这些状态代码自定义退避策略。我想对一些响应状态代码使用FixedBackOff策略,对其余的使用ExponentialBackOffPolicy策略。我环顾四周,没有发现任何提示。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-15 22:38:05

使用委托给所需BackOffPolicy的自定义BackOffPolicy,具体取决于retryContext中的lastThrowable

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61228744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档