如何在Mutiny的Uni中链式调用多个onFailure操作符?
Mutiny Uni 故障处理的简洁实现方案
你可以利用Mutiny中UniOnFailure的链式调用特性,把所有故障相关的操作放在同一个onFailure()块里,避免重复调用onFailure():
someUni .onFailure() .invoke(e -> log.info("Error {}", e.getMessage())) .retry().withBackOff(Duration.ofMillis(100), Duration.ofSeconds(5)).atMost(5) .invoke(() -> log.info("Retries exhausted, I'm going to give up.")) .recoverWithItem(Response.ok().build());
逻辑说明:
- 当Uni首次抛出故障时,先执行
invoke记录错误日志; - 紧接着触发退避重试逻辑,最多重试5次;
- 如果5次重试全部失败,会进入后续的
invoke记录重试耗尽的日志; - 最后通过
recoverWithItem恢复为指定的正常返回值,终结故障流。
这种写法的核心是:onFailure()返回的UniOnFailure实例支持链式调用所有故障处理操作,不需要每次执行完一个操作后重新调用onFailure(),大幅简化了代码结构。
内容的提问来源于stack exchange,提问作者Allan Juan
相关产品推荐
相关产品推荐

