使用Callable将回退添加到CircuitBreaker



我正在使用SpringJmsTemplate发送消息。我想引入resilience4j以允许我使用回退,因此当第一个调用失败时,它会使用另一个具有不同配置的JmsTemplate发送消息。

我有一个这样的方法:

void sendMessage(JmsTemplate jmsTemplate, String body) {
jmsTemplate.send(...);
}

问题是Decorators.ofCallableDecorators.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);
}

当对主电路的调用失败时,它会导致电路闭合。然后在一段时间内转到次要,直到它再次尝试主要。

最新更新