Я оцениваю повторные попытки для случая использования, когда нам нужно автоматически повторять определенные вызовы 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 для остальных. Я посмотрел вокруг и не нашел никаких указателей.