rabbitmq是否支持将相同的数据推送给多个消费者?

时间:2014-06-12 08:13:21

标签: rabbitmq

我有一个用作工作队列的rabbitmq集群。有5种消费者想要消费完全相同的数据。

我现在所知道的是使用扇出交换将数据“复制”到5个不同的队列。并且5个消费者可以消耗不同的队列。这有点浪费资源,因为文件队列中的数据是相同的。

我的问题是,rabbitmq是否支持将相同的数据推送给多个消费者?就像消息需要被删除指定时间一样。


我从rabbitmq电子邮件组得到以下答案。简而言之,答案是否定的......我上面所做的是正确的方法。

http://rabbitmq.1065348.n5.nabble.com/Does-rabbitmq-support-to-push-the-same-data-to-multi-consumers-td36169.html#a36170

1 个答案:

答案 0 :(得分:1)

  

...扇出交换将数据“复制”到5个不同的队列。并且5个消费者可以消耗不同的队列。这有点浪费资源,因为文件队列中的数据是相同的。

如果您不想复制邮件,则可以使用一个队列中的5个使用者。

  

Rabbitmq支持将相同数据推送给多个消费者

在AMQP协议术语中,您将消息发布到交换,然后代理(RabbitMQ)决定如何处理消息 - 假设它找出了用于(一个或多个)的队列消息,然后将该消息放在该队列之上( RabbitMQ中的队列是经典的FIFO队列,它在某种程度上破坏了RabbitMQ中的AMQP实现。只有在该消息可能被传递给消费者之后(或由于队列长度限制或每个队列或每个消息ttl而死亡,如果有的话)。

  

消息需要在指定的时间内被删除

在发布消息后无法更改消息正文或属性(实际上,Dead Letter Exchanges扩展名和其他一些可能会更改路由密钥,例如添加,删除和更改某些标头,但这是非常具体的案件)。因此,如果您想跟踪确认号码,您必须重新发布已更改的正文或标题的消费消息(取决于您计划存储ack计数器的位置,但标题非常适合此。

另请注意,有redeliverd消息属性表示消息是否已被消耗,然后重新传递。此标志不计算redelivers数量,因此它的使用非常有限。