【发布时间】:2017-10-17 12:37:44
【问题描述】:
我在后端有一个带有 RabbitMQ 的应用程序。所以我想开发自定义的 3rd 方分析代码,它连接 RabbitMQ 上的应用程序队列并收集数据。所以我的问题是我想确保应用程序和我的代码都不会丢失来自 rabbitmq 的任何数据。
如果可能,我该如何配置 RabbitMQ 队列?我对 RabbitMQ 有管理权限。 我希望这不是生产者代码问题,因为我无权访问应用程序代码
感谢您的帮助
【问题讨论】:
我在后端有一个带有 RabbitMQ 的应用程序。所以我想开发自定义的 3rd 方分析代码,它连接 RabbitMQ 上的应用程序队列并收集数据。所以我的问题是我想确保应用程序和我的代码都不会丢失来自 rabbitmq 的任何数据。
如果可能,我该如何配置 RabbitMQ 队列?我对 RabbitMQ 有管理权限。 我希望这不是生产者代码问题,因为我无权访问应用程序代码
感谢您的帮助
【问题讨论】:
更改当前的交换/队列映射以允许消息复制
目前我们可以简化现有生产者向现有交换器发送消息,将消息路由到某个队列,现在从该队列消费消息:
[producer-app] ---> existing-exchange ---> existing-queue ---> [existing-consumer]
现在,您希望拥有以下设计,让新消费者使用相同的消息:
[producer-app] ---> existing-exchange ---> existing-queue ---> [existing-consumer]
\--> new-queue --------> [your-consumer]
您可能需要更改 existing-exchange 的配置以允许复制您的消息 - 例如,direct 和 fanout 将在每个队列上创建相同的消息。
根据您的应用程序,在不更改生产者的情况下可能很容易执行,但您需要注意可能的陷阱:
new-queue(最好从您的消费者工件中),因为它将接收所有消息;如果您的消费者关闭,队列不会消失,除非它被设为独占或设置了 TTL【讨论】: