【问题标题】:Spring Boot - RabbitMQ - Handle Scenario where broker is downSpring Boot - RabbitMQ - 处理代理关闭的场景
【发布时间】:2017-02-22 16:20:41
【问题描述】:

我们在项目中使用 rabbitmq 进行消息传递。这主要用于审计日志记录。我们试图检查我们的应用程序如何响应某些故障场景。例如,如果 RabbitMQ 已关闭,消费者会不断尝试与 rabbitmq 建立连接并失败。如果 rabbitmq 出现故障,消费者有没有办法停止尝试?以类似的方式,当代理关闭时,发布者如何停止尝试向队列发送消息?断路器是我们可以考虑的选项之一吗?

【问题讨论】:

    标签: java spring spring-boot rabbitmq spring-rabbit


    【解决方案1】:

    您可以将RetryTemplate 添加到RabbitTemplate bean。

    RecoveryCallback 实现添加到仅忽略(或记录)错误的重试模板。

    它将尝试连接,但不会失败。

    如果您在 Spring AMQP 之上使用 Spring Integration layer,则可以将 circuit breaker request handler advice 添加到出站通道适配器。

    【讨论】:

    • 谢谢@Gary Russel。消费来自 RabbitMQ 的消息的消费者是否可以使用 RetryTemplate。我为每个应用程序实例设置了 10 个消费者,我看到他们不断尝试连接到已关闭的 rabbitmq 实例。有没有办法让我使用重试模板或断路器来停止轮询队列?
    • 否;在消费者端,您可以通过recoveryIntervalrecoveryBackOff 配置连接重试。如果你使用FixedBackOff,它可以配置为maxAttempts,它会在那个数字之后自动停止容器。修复连接后,您将不得不再次手动启动容器。
    • 谢谢@Gary Russell。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2014-08-15
    • 2020-06-03
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    相关资源
    最近更新 更多