因此,我一直在尝试使用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,但这不包含我所需要的。
任何想法都将受到欢迎。谢谢。
答案 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);
}
}