Можно ли настроить политику возврата, используемую шаблоном повтора на основе кода HttpStatus - PullRequest
0 голосов
/ 15 апреля 2020

Я оцениваю повторные попытки для случая использования, когда нам нужно автоматически повторять определенные вызовы API на основе кода состояния. Я могу настроить политику повтора следующим образом:

@Component("httpStatusCodeRetryPolicy")
public class HttpStatusRetryPolicy extends ExceptionClassifierRetryPolicy
{
    @PostConstruct
    public void init()
    {
        SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
        this.setExceptionClassifier( new Classifier<Throwable, RetryPolicy>()
        {
            @Override
            public RetryPolicy classify(Throwable classifiable )
            {
                if ( classifiable instanceof HttpStatusCodeException)
                {
                    var exception = (HttpStatusCodeException)classifiable;
                    if(exception.getStatusCode() == HttpStatus.REQUEST_TIMEOUT){
                       retryPolicy.setMaxAttempts(3);
                    }
                    else if (exception.getStatusCode() == HttpStatus.valueOf(429) ||
                    exception.getStatusCode() == HttpStatus.valueOf(502) ||
                    exception.getStatusCode() == HttpStatus.valueOf(503) ||
                    exception.getStatusCode() == HttpStatus.valueOf(504)) {
                        retryPolicy.setMaxAttempts(4);
                    }
                    return retryPolicy;
                }
                return new NeverRetryPolicy();
            }
        });
    }
}

Однако я также хочу настроить политику возврата, основываясь на этих кодах состояния. Я хочу использовать политику FixedBackOff для некоторого кода состояния ответа и ExponentialBackOffPolicy для остальных. Я посмотрел вокруг и не нашел никаких указателей.

1 Ответ

2 голосов
/ 15 апреля 2020

Используйте пользовательский BackOffPolicy, который делегирует желаемому BackOffPolicy, в зависимости от lastThrowable в retryContext.

...