resilience4j - 使用 Callable 向 CircuitBreaker 添加回退
问题描述
我正在使用 SpringJmsTemplate
发送消息。我想介绍一下resilience4j
以允许我使用 Fallback,因此当第一次调用失败时,它会使用另一个JmsTemplate
配置不同的消息发送消息。
我有一个这种方法:
void sendMessage(JmsTemplate jmsTemplate, String body) {
jmsTemplate.send(...);
}
问题是,如果我更改方法以返回一些字符串,我可以使用以下选项Decorators.ofCallable
或Decorators.ofConsumer
不给我选项。withFallback
sendMessage
Decorators.ofCallable(() -> sendMessage(primaryJmsTemplate, body))
.withFallback(s -> sendMessage(secondaryJmsTemplate, body))
.withCircuitBreaker(circuitBreaker).call();
我宁愿不返回随机值只是为了让它工作。可调用/消费者不允许回退是否有原因?或者有没有不同的方法来实现我想要使用的东西resilience4j
?
解决方案
我用这个改变了我的方法,因为我误解了withFallback
会实现什么。
我现在使用以下内容:
try {
circuitBreaker.executeRunnable(() -> sendMessage(primaryJmsTemplate, body));
} catch (Exception e) {
sendMessage(secondaryJmsTemplate, body);
}
当对主要的调用失败时,它会导致关闭电路。然后进入辅助服务器一段时间,直到它再次重试主服务器。
推荐阅读
- javascript - Discord.JS 附件 URL / 图片问题
- python - Python Selenium 写入 excel
- c - C - 带有 pow 功能问题的 printf
- bluetooth - 当您信任蓝牙设备时,存储信任的配置文件在哪里?
- statistics - stata 从 T 分布计算概率
- javafx - 使用 fxml 将模型绑定到自定义控件
- asp.net - 如何正确设置 ASP.NET web.config 以在边缘情况下显示特定于应用程序、安全且用户友好的 asp.net 错误消息
- flutter - Flutter Navigator.push : .then 未调用回调
- nginx - Flask和nginx+uwsgi:上游超时和上游过早关闭
- azure-data-factory - ADF 映射数据流中的指纹行不区分大小写