Python Rabbitmq一个队列多个使用者

Python Rabbitmq一个队列多个使用者,python,python-2.7,rabbitmq,pika,Python,Python 2.7,Rabbitmq,Pika,我有多个消费者在同一队列上进行轮询,并且每X秒检查一次队列,基本上X秒之后,至少有两个消费者可以同时启动basic.get 问题是: 1.如果至少两个消费者同时可以收到相同的信息 2.据我所知,只有basic_ack会从队列中删除一个mesage,因此假设我们有以下场景: Consumer1使用basic.get获取消息,在消息到达basic\u ack行之前,Consumer2也会收到此消息(basic.get),现在Consumer1到达basic.ack,只有现在Consumer2到达自己

我有多个消费者在同一队列上进行轮询,并且每X秒检查一次队列,基本上X秒之后,至少有两个消费者可以同时启动
basic.get

问题是:
1.如果至少两个消费者同时可以收到相同的信息

2.据我所知,只有
basic_ack
会从队列中删除一个mesage,因此假设我们有以下场景:

Consumer1
使用basic.get获取消息,在消息到达
basic\u ack
行之前,
Consumer2
也会收到此消息(
basic.get
),现在
Consumer1
到达
basic.ack
,只有现在
Consumer2
到达自己的
basic.ack
当Consumer2到达其
basic.ack
时会发生什么情况?
消息是否也会由Consumer2处理,因为操作不是原子的

我的消费者使用python pika的代码逻辑如下:

为true时:
m_帧=无
而(m_帧为无):
自我连接。睡眠(10) m_-frame,h_-frame,body=self.channel.basic_-get('test_-queue')) self.channel.basic_ack(m_frame.delivery_标签) [做一些长逻辑-几分钟]

请注意,我不使用basic.consume

所以我不知道这种用法是否包括循环抓取

1.如果至少两个消费者同时可以收到相同的信息

否-单个消息将仅传递给单个消费者

正因为如此,你的场景2根本没有发挥作用

您永远不会有两个使用者处理同一条消息,除非您
nack
将消息返回队列,但仍继续处理它