使用 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);
}
}
所以我一直在试验 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);
}
}