使用Spring RetryTemplate时获取当前的退避值

时间:2019-12-06 00:13:57

标签: java spring spring-retry retrytemplate

因此,我一直在尝试使用Spring的Retry Template。一切都按预期进行。但是,我想做的一件事是能够提取或记录正在使用的当前退避时间。我浏览了所有地方的文档/搜索结果,但找不到任何简单的方法来获得它。

    @Bean
    public RetryTemplate retryTemplate() {
        RetryTemplate retryTemplate = new RetryTemplate();

        ExponentialBackOffPolicy exponentialBackOffPolicy = new ExponentialBackOffPolicy();

        exponentialBackOffPolicy.setMaxInterval(10000); // 10 secs
        exponentialBackOffPolicy.setMultiplier(2);    // double the backoff
        retryTemplate.setBackOffPolicy(exponentialBackOffPolicy);

        SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
        retryPolicy.setMaxAttempts(2);
        retryTemplate.setRetryPolicy(retryPolicy);

        return retryTemplate;
    }

我正在这样使用它...

retryTemplate.execute(arg0 -> {
    myService.templateRetryService();
    return null;
});

RetryCallback仅提供RetryConext,但这不包含我所需要的。

任何想法都将受到欢迎。谢谢。

1 个答案:

答案 0 :(得分:1)

您可以在Sleeper上设置自定义ExponentialBackOffPolicy来记录时间。

/**
 * Public setter for the {@link Sleeper} strategy.
 * @param sleeper the sleeper to set defaults to {@link ThreadWaitSleeper}.
 */
public void setSleeper(Sleeper sleeper) {
    this.sleeper = sleeper;
}

默认的卧铺是:

@SuppressWarnings("serial")
public class ThreadWaitSleeper implements Sleeper {

    @Override
    public void sleep(long backOffPeriod) throws InterruptedException {
        Thread.sleep(backOffPeriod);
    }

}