Python rabbitmq队列上有多个使用者-只有一个获得消息

Python rabbitmq队列上有多个使用者-只有一个获得消息,python,rabbitmq,amqp,pika,Python,Rabbitmq,Amqp,Pika,我实现了多个消费者,他们从一个队列中获取消息,我使用类似的方法来实现这一点,只是我在进行basic.get无限循环以进行轮询 知道如何防止所有消费者之间的竞争吗?因为只有一个消费者会收到消息,而另一个消费者会继续进行轮询,直到另一条消息出现为止? 我尝试实现一种逻辑,在这种逻辑中,我一收到消息,就立即确认要删除的消息,但似乎其他一些队列在第一个队列确认并删除消息之前就设法获得了该消息。 因此,每个消费者都得到了信息 提前谢谢 你知道如何防止所有消费者之间的竞争吗?因为只有一个消费者会收到消息,而

我实现了多个消费者,他们从一个队列中获取消息,我使用类似的方法来实现这一点,只是我在进行basic.get无限循环以进行轮询

知道如何防止所有消费者之间的竞争吗?因为只有一个消费者会收到消息,而另一个消费者会继续进行轮询,直到另一条消息出现为止?
我尝试实现一种逻辑,在这种逻辑中,我一收到消息,就立即确认要删除的消息,但似乎其他一些队列在第一个队列确认并删除消息之前就设法获得了该消息。 因此,每个消费者都得到了信息

提前谢谢

你知道如何防止所有消费者之间的竞争吗?因为只有一个消费者会收到消息,而另一个消费者会继续进行轮询,直到另一条消息出现


你不能,你安排事情的方式。RabbitMQ将向使用者循环消息,但只有一个使用者将从队列接收消息。这是RabbitMQ中的设计,当您在一个队列上有多个使用者时

如果需要所有使用者接收所有消息,则需要更改配置,以便每个使用者都有自己的队列。然后,您需要通过一个将消息传递给所有消费者的所有队列的交换来发布消息


最简单的方法是使用扇出交换类型。

如何在队列上发布消息?你怎么吃的?我是否正确理解,您的所有消费者都会收到消息,而不仅仅是一个客户,但您只希望一个客户收到消息?还是只有一个客户端接收到消息,而您希望每个客户端都接收到消息?使用channel.basic_publish发布-直接使用路由键使用basic_get消费消息,与上面的示例完全相同我的所有消费者都接收到消息,我希望第一个收到消息的人将处理它,而且只有一个消费者会从队列中获得每条消息,即“但只有一个消费者会从队列中收到消息”的消费者,这正是我想要的,但事实并非如此。无论如何,我添加了
channel.basiq\u qos(prefetch\u count=1)
,现在似乎只有一个消费者收到消息,而不是所有消费者都在一个频道上设置
prefetch\u count
1
,并且在该频道上有多个消费者且
auto\u ack
处于关闭状态将完成这项工作。只有一个活动消费者将保留消息,而另一个消费者将等待消息。请注意,它仅在消费者位于同一频道时有效。但是,如果它们在同一个通道上,并且您一次只需要处理一个消费者的消息,我想运行单个消费者是有意义的。另外,请查看queue的
exclusive
参数,在某些情况下,它可能是一个解决方案。@zaq178miami:我有点困惑,问题是,我有两个队列,每个队列上有多个使用者,我想知道,当消息到达队列X->只有一个活动使用者会接收消息,其他人会继续等待,当然,在下一条消息之前,同样的故事目前看来,我也看到每个消费者打开了新的通道和新的连接,我应该为每个队列使用相同的通道吗?如果我在不同的进程上多次运行使用者文件,我如何做到这一点?