首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用重试模板执行自定义重试策略

使用重试模板执行自定义重试策略
EN

Stack Overflow用户
提问于 2019-10-10 23:07:49
回答 1查看 504关注 0票数 0

我有一个自定义的重试策略,只要应用程序接收到非404的http状态码,它就会执行重试。我还创建了一个重试模板。我被困在如何使用重试模板执行自定义重试策略上。在这方面的任何帮助以及如何测试我的结果将是非常好的。我已经包含了重试模板和自定义重试策略的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public RetryTemplate retryTemplate() {
        RetryTemplate retryTemplate = new RetryTemplate();

        FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();
        backOffPolicy.setBackOffPeriod(maxBackOffPeriod);
        retryTemplate.setBackOffPolicy(backOffPolicy);

        NeverRetryPolicy doNotRetry = new NeverRetryPolicy();
        SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
        retryPolicy.setMaxAttempts(maxAttempts);
        retryTemplate.setRetryPolicy(retryPolicy);

        return retryTemplate;
    }






public class HttpFailedConnectionRetryPolicy extends ExceptionClassifierRetryPolicy {

@Value("${maxAttempts:-1}")
private String maxAttempts;

public void HttpFailedConnectionRetryPolicy() {
    this.setExceptionClassifier(new Classifier<Throwable, RetryPolicy>() {
        @Override
        public RetryPolicy classify(Throwable classifiable) {
            Throwable exceptionCause = classifiable.getCause();
            if (exceptionCause instanceof HttpStatusCodeException) {
                int statusCode = ((HttpStatusCodeException) classifiable.getCause()).getStatusCode().value();
                return handleHttpErrorCode(statusCode);
            }
            return simpleRetryPolicy();
        }
    });
}

public void setMaxAttempts(String maxAttempts) {
    this.maxAttempts = maxAttempts;
}

private RetryPolicy handleHttpErrorCode(int statusCode) {
    RetryPolicy retryPolicy = null;
    switch (statusCode) {
        case 404:
            retryPolicy = doNotRetry();
            break;
        default:
            retryPolicy = simpleRetryPolicy();
            break;
    }
    return retryPolicy;
}

private RetryPolicy doNotRetry() {

    return new NeverRetryPolicy();
}

private RetryPolicy simpleRetryPolicy() {
    final SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy();
    simpleRetryPolicy.setMaxAttempts(Integer.valueOf(maxAttempts));
    return simpleRetryPolicy;
}

}

EN

回答 1

Stack Overflow用户

发布于 2019-10-11 15:28:45

只需将重试策略的一个实例注入模板,而不是SimpleRetryPolicy

要进行测试,您可以向测试用例中的模板添加一个RetryListener

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

https://stackoverflow.com/questions/58332214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文