我有 2 个 Rabbitmq 节点作为集群连接(无队列复制),并且有 4 个工作节点,所有节点都绑定到同一个队列“myqueue”,现在,我手动将消息发布到该队列(发布者可以连接到任何一个)兔子节点..不影响结果)。
现在,会发生这种情况:每次我向该队列发布消息时,我都会发现消息以循环方式传递给工作人员/消费者,无论消费者或发布者连接到哪个节点,我总是得到相同的结果。
有人告诉我这是Rabbitmq的“prefetch_count”的效果,但我不明白这是怎么回事,甚至我不知道这是否是正确的答案。
我认为rabbitmq 的行为是正确的。当工作人员监听队列时,rabbitmq 以循环方式向消费者传递消息。
参考:http://www.rabbitmq.com/tutorials/tutorial-two-python.html
默认情况下,RabbitMQ 会将每条消息按顺序发送给下一个消费者。平均而言,每个消费者都会收到相同数量的消息。这种分发消息的方式称为循环法。与三个或更多工人一起尝试这个。
我知道现在回答已经很晚了(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 个工作人员同时接收所有消息怎么办?
更多信息请点击此处 https://www.rabbitmq.com/tutorials/tutorial- Three-java