Spring Retry больше не вызывает maxAttempts - PullRequest
1 голос
/ 11 марта 2020
 try {
        reponseType = retryTemplate.execute((RetryCallback<X, RetryException>) context -> {
            try {
                log.error("Calling api attempt #" + context.getRetryCount());
                HttpEntity<x> xResponse = httpRestTemplate.exchange(requestUrl, HttpMethod.POST, entity, x.class);
                return xResponse.getBody();
            } catch (HttpStatusCodeException e) {
                if (e.getStatusCode().is5xxServerError()) {
                    throw new RetryException("api returned Server Error", e);
                }
                return null;
            }
        });
 } catch (RetryException e) {
        throw  e;

Определена политика retryTemplate в файле конфигурации, а httpRestTemplate является обычным шаблоном

@Bean
RetryTemplate retryTemplate() {
    RetryTemplate retryTemplate = new RetryTemplate();
    FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
    fixedBackOffPolicy.setBackOffPeriod(30000);
    retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
    retryTemplate.setRetryPolicy(new CustomRetryPolicy(3));
    return retryTemplate;
}

Но не может повторно вызвать retryTemplate после указанного времени. Может ли кто-нибудь помочь мне, я думаю, что я запутался в игре исключений.

1 Ответ

2 голосов
/ 11 марта 2020

Это будет повторяться только если e.getStatusCode().is5xxServerError(). В противном случае вы возвращаете null, что является «успехом» с точки зрения шаблона повтора. Шаблон будет повторяться только при возникновении исключения.

Вы можете классифицировать, какие исключения повторяются в политике повторов.

...