Получите текущее значение отсрочки при использовании Spring RetryTemplate

Итак, я экспериментировал с шаблоном повторных попыток Spring. Все работает как положено. Однако я бы хотел иметь возможность извлекать или регистрировать текущее время отсрочки, которое используется. Я просмотрел документы / искал повсюду, но не могу найти простого способа получить это.

    @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 ответ

Решение

Вы можете установить собственный 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);
    }

}
Другие вопросы по тегам