Как записать каждый бросок при использовании .onFailure().retry() с задержкой между попытками
Мне нужно записать причину сбоя в метриках для каждого неудачного HTTP-вызова при использовании Vert.x WebClient. Это компилирует:
.onFailure()
.retry()
.withBackOff(Duration.ofMillis(INITIAL_RETRY_DELAY_MS))
.until(retryTimeExpired(wrapper))
я записываю показатели в
retryTimeExpired
метод. Но во время выполнения я получаю это:
Caused by: java.lang.IllegalArgumentException: Invalid retry configuration, `when` cannot be used with a back-off configuration
at io.smallrye.mutiny.groups.UniRetry.when(UniRetry.java:156)
at io.smallrye.mutiny.groups.UniRetry.until(UniRetry.java:137)
Я мог бы, конечно, добавить, но это реактивно. Можно было бы заблокировать на короткое время, но я бы не хотел блокировать ветку. Любые идеи, как это сделать без
sleep
?
1 ответ
Вы можете попробовать использовать много последовательных
onFailure
с. Пока первый не обрабатывает исключение (
recoverWithItem
,
recoverWithNull
,
recoverWithUni
) или бросить свой следующий должен наблюдать тот же сбой.
service.apiMethod(key)
.invoke(record -> logger.info("Succeeded to read record."))
.onFailure()
.invoke(exception -> logger.warn("Failed to read record."))
.onFailure()
.retry().withBackOff(delay).indefinitely();