我正在使用SpringJmsTemplate
发送消息。我想引入resilience4j
以允许我使用回退,因此当第一个调用失败时,它会使用另一个具有不同配置的JmsTemplate
发送消息。
我有一个这样的方法:
void sendMessage(JmsTemplate jmsTemplate, String body) {
jmsTemplate.send(...);
}
问题是Decorators.ofCallable
或Decorators.ofConsumer
没有给我withFallback
选项如果我更改sendMessage
方法以返回一些String,我可以使用以下方法。
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);
}
当对主电路的调用失败时,它会导致电路闭合。然后在一段时间内转到次要,直到它再次尝试主要。