【问题标题】:Spring Cloud and RabbitMQ: how change the queue to auto-delete = false?Spring Cloud 和 RabbitMQ:如何将队列更改为 auto-delete = false?
【发布时间】:2018-07-25 17:07:41
【问题描述】:

我正在使用带有 RabbitMQ 的 Spring Cloud example

使用 RabbitMQ 启动 docker 后:

sudo docker run -t -i --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

我执行了发布者和订阅者应用程序的示例来观察消息的行为。

我在管理面板 (http://localhost:15672) 中注意到的一件事是,在启动订阅者时创建的队列配置为 auto-delete: true。因此,当没有订阅者运行时,不会创建队列,并且发布者发送的每条消息都被丢弃。这不是我期望的默认配置!

所以,我想将创建的队列更改为auto-delete: false,因为这样消息不会丢失,并且当一些订阅者启动时,它将能够使用排队的消息(对吗?)。我如何在 Spring 上做到这一点?

正如我所说,我使用的所有代码都可以在这个example 中找到。我所做的唯一更改是将 Spring Boot 的版本更新为 1.5.9.RELEASE。

【问题讨论】:

  • 你找到解决方案了吗?
  • @idipous 我没有测试它,但我找到了一个可能的解决方案。我将分享答案

标签: spring spring-boot rabbitmq message-queue


【解决方案1】:

使用Spring Cloud Stream,the option使队列持久化为durableSubscription

spring.cloud.stream.rabbit.bindings.<channelName>.consumer.durableSubscription = true

正如here解释的那样:

根据您的需要,如果您将其设置为匿名 消费者(没有消费者组)然后队列将自动 删除。如果您需要多个竞争,这将不起作用 消费者。如果您确实需要一个消费者组,那么您可以使用 持久订阅设置

【讨论】:

    【解决方案2】:

    我发现另一个可行的解决方案是:

    spring.cloud.stream.bindings.<inputChanneName>.group=GROUP_NAME
    

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多