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

Get the current backoff value when using Spring RetryTemplate

所以我一直在试验 Spring 的重试模板。一切都按预期工作。然而,我想要的一件事是能够提取或记录正在使用的当前退避时间。我到处查看了 docs/searched,但找不到任何简单的方法。

    @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 但这不包含我需要的东西。

欢迎提出任何想法。谢谢

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

/**
 * 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);
    }

}