Как записать каждый бросок при использовании .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();
Другие вопросы по тегам