【问题标题】:Add Fallback to CircuitBreaker with Callable使用 Callable 向 CircuitBreaker 添加回退
【发布时间】:2021-08-18 10:01:01
【问题描述】:

我正在使用 Spring JmsTemplate 发送消息。我想介绍resilience4j 以允许我使用Fallback,这样当第一次调用失败时,它会使用另一个配置不同的JmsTemplate 发送消息。

我有这个方法:

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

问题是Decorators.ofCallableDecorators.ofConsumer 没有给我withFallback 选项 如果我更改 sendMessage 方法以返回一些字符串,我可以使用以下内容。

Decorators.ofCallable(() -> sendMessage(primaryJmsTemplate, body))
    .withFallback(s -> sendMessage(secondaryJmsTemplate, body))
    .withCircuitBreaker(circuitBreaker).call();

我宁愿不返回随机值只是为了让它工作。可调用/消费者不允许回退是否有原因?或者有没有其他方法可以使用resilience4j 实现我想要的?

【问题讨论】:

    标签: resilience4j


    【解决方案1】:

    我改变了我的方法,因为我误解了withFallback 将实现的目标。

    我现在使用以下内容:

    try {
        circuitBreaker.executeRunnable(() -> sendMessage(primaryJmsTemplate, body));
    } catch (Exception e) {
        sendMessage(secondaryJmsTemplate, body);
    }
    

    当对主要的调用失败时,它会导致关闭电路。然后转到辅助服务器一段时间,直到它再次重试主服务器。

    【讨论】:

      猜你喜欢
      • 2021-02-03
      • 2013-12-17
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多