想在同一个RabbitMQ队列

时间:2017-10-17 12:37:44

标签: rabbitmq message-queue

我在后端有一个RabbitMQ应用程序。所以我想开发自定义的第三方分析代码,它连接RabbitMQ上的应用程序队列并收集数据。所以我的问题是我想确保应用程序和我的代码都不会丢失来自rabbitmq的任何数据。

如果可以,我该如何配置RabbitMQ队列?我在RabbitMQ上有管理权限。 我希望它不是生产者问题的代码,因为我没有访问应用程序代码

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

更改当前的交换/队列映射以允许邮件复制

目前,我们可以简化现有生产者向现有交换机发送消息,将消息路由到某个队列,消息现在从该队列中消耗:

[producer-app] ---> existing-exchange ---> existing-queue ---> [existing-consumer]

现在,您希望拥有以下设计,新消费者使用相同的消息:

[producer-app] ---> existing-exchange ---> existing-queue ---> [existing-consumer]
                                      \--> new-queue --------> [your-consumer]

您可能需要更改existing-exchange的配置以允许复制邮件 - 例如directfanout将在每个队列上创建相同的邮件。

根据您的应用程序,可能很容易在没有生产者更改的情况下执行,但您需要了解可能存在的缺陷:

  • 生产者可能会不时重新声明交换/队列/绑定,如果当前状态无法更改为其请求,则抛出异常(如果更改交换类型,可能会发生这种情况)
  • 您需要自己管理new-queue(最好是来自您的消费者工件),因为它将接收所有消息;如果您的消费者关闭,队列不会消失,除非它被设为独占或设置了TTL