【问题标题】:RabbitMQ multiple consumer subscribe same queue and get same messageRabbitMQ 多个消费者订阅同一个队列并获得相同的消息
【发布时间】:2020-06-20 15:28:44
【问题描述】:

我正在考虑多个消费者是否可以从他们订阅的“相同”队列中获取“相同”消息?

也就是说consumer_1和consumer_2都是subscribe queue_1,当一个消息被publisher发布时,这个consumer中的两个consumer可以同时得到这个消息吗?

如果是,我该如何实施?

【问题讨论】:

    标签: rabbitmq


    【解决方案1】:

    这是不可能的。 一次可以将一条消息传递给队列的一个消费者。但是,可以通过单个交换将单个消息路由到多个队列Refer 用于不同形式的绑定,exchanges 由 rabbitMQ 提供。

    但是,请注意,rabbitmq 提供了requeuingnacks 的选项。

    【讨论】:

      【解决方案2】:

      这是不可能的。来自队列的特定消息不能被多个消费者消费。

      请记住,在 AMQP 中,消息总是从队列中消耗。

      1. 队列中的消息仅由一个消费者使用
      2. 您可以让相互竞争的消费者分担队列中的工作负载

      非常高级的 AMQP 流程

      1. 生产者向交易所发布消息。
      2. 交换器接收消息并将其路由到队列。(基于消息属性、交换器类型和绑定)
      3. 消费者处理消息,否则它会留在队列中直到被消费。

      根据您在第 2 步中创建的交换类型和绑定,您可以在 AMQP 中实现不同的消息交换模式。 无论是点对点、pub sub、multicast,都将根据步骤 2 中发生的情况而定。

      一篇带有漂亮图表的好文章

      https://www.cloudamqp.com/blog/2015-09-03-part4-rabbitmq-for-beginners-exchanges-routing-keys-bindings.html#standard-rabbitmq-message-flow

      【讨论】: