在重试之间延迟使用 .onFailure().retry() 时如何记录每个 throwable
How to record each throwable when using .onFailure().retry() with delay between retries
使用 Vert.x WebClient 时,我需要在指标中记录每个失败的 http 调用的失败原因。这编译:
.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
但这是被动的。可以短时间阻塞,但我不想阻塞线程。没有 sleep
如何做到这一点的任何想法?
您可以尝试使用许多连续的 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();
使用 Vert.x WebClient 时,我需要在指标中记录每个失败的 http 调用的失败原因。这编译:
.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
但这是被动的。可以短时间阻塞,但我不想阻塞线程。没有 sleep
如何做到这一点的任何想法?
您可以尝试使用许多连续的 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();