Похоже, что `.retryWhen (retry429) 'перезаписывает другие попытки.
Это неверно. retryWhen
- составной оператор, который основан на существующем издателе - вы можете связывать его столько раз, сколько захотите. Единственный раз, когда вам нужно беспокоиться о том, что одна повторная попытка «переопределит» другую, - это когда ваши filter
предикаты перекрываются.
Даже в этом случае похоже, что это «первая победа» (в цепочке), а не «последняя» wins ".
Вместо этого ваши проблемы могут быть связаны с этой строкой:
protected static final Predicate<Throwable> is5xx =
(throwable) -> throwable instanceof WebClientResponseException.ServiceUnavailable;
Судя по вашему имени и вашему описанию, похоже, вы хотите, чтобы это перехватило любую ошибку 5xx, но это будет ловить только 503 (который специально назначен для "служба недоступна".)
Если вы пытаетесь сделать что-то другое, например, ошибку 502 или 500 - тогда ни один из предикатов (и, следовательно, повторных попыток) вы Будет найдено соответствие.
Вместо этого, чтобы проверить наличие ошибок 5xx, вы, вероятно, захотите:
protected static final Predicate<Throwable> is5xx =
(throwable) -> throwable instanceof WebClientResponseException && ((WebClientResponseException)throwable).getStatusCode().is5xxServerError();