Могу ли я заставить Spring's @Retryable или @RetryTemplate использовать число, полученное в заголовке Retry-After
в HTTP 503
ответе «Служба недоступна», в качестве задержки для следующей итерации повторения?
Например:
@Retryable(maxAttempts = 42,
backoff = @Backoff(delay = 1000),
value = NotYetReady.class)
public boolean isExternalComponentReadyToUse() throws NotYetReady {
ResponseEntity<String> response = callRestEndpointToCheckReadiness();
if (!response.getStatus().is2xxSuccessful()) {
int retryAfterInSeconds = response.getHeaders().get("Retry-After");
// tell @Retryable to run next attempt after retryAfterInSeconds?
throw new NotYetReady();
}
return true;
}
Наше Java-приложение использует внешний компонент, который занимает несколько минут. Этот компонент предоставляет конечную точку REST для проверки готовности. Конечная точка отправляет обратно 503
с заголовком Retry-After
, если она может оценить, сколько времени займет оставшаяся установка.