Политика Spring Retry для подключения и чтения тайм-аутов - PullRequest
1 голос
/ 14 октября 2019

У меня есть приложение весенней загрузки, в котором я реализовал шаблон отдыха и установил время ожидания соединения и чтения. Я пытаюсь реализовать политику повторных попыток приложения, когда эти тайм-ауты выполняются. Когда происходят тайм-ауты, тайм-ауты соединения и чтения выдают ResourceAccessException. Далее в сведениях для каждого тайм-аута тайм-аут соединения показывает исключение ConnectionTimeoutException, а тайм-аут чтения показывает исключение SocketTimeoutException. Я реализовал RetryTemplate, показанный ниже, для выполнения определенного количества раз, и мне нужна помощь с выполнением его с повторными попытками для этих исключений времени ожидания. Любой совет будет принята с благодарностью. Спасибо !!

       @Bean
            public RetryTemplate retryTemplate() {
                SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
                retryPolicy.setMaxAttempts(maxAttempts);

                FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();
                backOffPolicy.setBackOffPeriod(backOffPeriod);

                RetryTemplate template = new RetryTemplate();
                template.setRetryPolicy(retryPolicy);
                template.setBackOffPolicy(backOffPolicy);

                return template;
            }


    public class RetryService {
    @Autowired
    private RetryTemplate retryTemplate;

    public class RetryService {
    @Autowired
    private RetryTemplate retryTemplate;

    public void withTemplate() {
        retryTemplate.execute(retryContext -> {

        });
    }
}

1 Ответ

0 голосов
/ 14 октября 2019

Вы можете использовать одну из расширенных политик повторных попыток (см. Их javadocs).

Или просто настроить SimpleRetryPolicy с одним из его более богатых конструкторов, таких как этот .

/**
 * Create a {@link SimpleRetryPolicy} with the specified number of retry attempts. If
 * traverseCauses is true, the exception causes will be traversed until a match is
 * found. The default value indicates whether to retry or not for exceptions (or super
 * classes) are not found in the map.
 * @param maxAttempts the maximum number of attempts
 * @param retryableExceptions the map of exceptions that are retryable based on the
 * map value (true/false).
 * @param traverseCauses is this clause traversable
 * @param defaultValue the default action.
 */
public SimpleRetryPolicy(int maxAttempts, Map<Class<? extends Throwable>, Boolean> retryableExceptions,
        boolean traverseCauses, boolean defaultValue) {

Сконфигурируйте карту с исключениями, которые вы хотите повторить.

...