【问题标题】:want to run multiple consumers on same RabbitMQ queue想在同一个 RabbitMQ 队列上运行多个消费者
【发布时间】:2017-10-17 12:37:44
【问题描述】:

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

如果可能,我该如何配置 RabbitMQ 队列?我对 RabbitMQ 有管理权限。 我希望这不是生产者代码问题,因为我无权访问应用程序代码

感谢您的帮助

【问题讨论】:

    标签: rabbitmq message-queue


    【解决方案1】:

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

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

    [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

    【讨论】:

    • 你好 Adam 你有任何基于 ascii 艺术推荐的配置示例吗?我无法在这种环境下长时间停机,所以我必须在短窗口内应用正确的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 2017-04-13
    相关资源
    最近更新 更多