为什么 Rabbitmq 集群以循环方式向消费者传递消息

问题描述 投票:0回答:2

我有 2 个 Rabbitmq 节点作为集群连接(无队列复制),并且有 4 个工作节点,所有节点都绑定到同一个队列“myqueue”,现在,我手动将消息发布到该队列(发布者可以连接到任何一个)兔子节点..不影响结果)。

现在,会发生这种情况:每次我向该队列发布消息时,我都会发现消息以循环方式传递给工作人员/消费者,无论消费者或发布者连接到哪个节点,我总是得到相同的结果。

有人告诉我这是Rabbitmq的“prefetch_count”的效果,但我不明白这是怎么回事,甚至我不知道这是否是正确的答案。

rabbitmq amqp high-availability round-robin node-amqp
2个回答
1
投票

我认为rabbitmq 的行为是正确的。当工作人员监听队列时,rabbitmq 以循环方式向消费者传递消息。

参考:http://www.rabbitmq.com/tutorials/tutorial-two-python.html

默认情况下,RabbitMQ 会将每条消息按顺序发送给下一个消费者。平均而言,每个消费者都会收到相同数量的消息。这种分发消息的方式称为循环法。与三个或更多工人一起尝试这个。


0
投票

我知道现在回答已经很晚了(11年):P

但也许有人会发现这很有用。

此行为是由于注册消费者节点时的“独占”标志值造成的。您可以在rabbitMQ官方文档中找到更多相关信息。

https://www.rabbitmq.com/docs/consumers#single-active-consumer

#1 如果在将 4 个工作人员注册到同一个“myqueue”时将排他性设置为“true”,会发生什么?

即使其他 3 个 Worker 已注册,也只有第一个注册的 Worker 会收到来自交易所的消息。只有当第一个工人死亡时,第二个注册工人才会收到消息。当 2 个死亡时,3 个会得到,依此类推。在任何时间点,都只会使用一名工人。

#2 如果在将 4 个工作人员注册到同一个“myqueue”时将排他性设置为“false”,会发生什么?

所有 4 个工作人员将以循环方式接收消息。

#3 如果您希望所有 4 个工作人员同时接收所有消息怎么办?

  1. 你必须使用“扇出”交换。
  2. 生产者必须发布到该交易所而不是队列
  3. 所有 4 个工作线程都必须通过将独占队列绑定到同一交换器来订阅交换器。

更多信息请点击此处 https://www.rabbitmq.com/tutorials/tutorial- Three-java

© www.soinside.com 2019 - 2024. All rights reserved.