我有多个消费者在同一个队列上轮询,每隔X秒检查一次队列,基本上在X秒之后,至少有两个消费者可以同时启动basic.get
。在
问题:
1.如果在同一时间至少有两个消费者可以收到相同的信息?在
2.根据我的理解,只有basic_ack
会从队列中删除一个消息,所以假设我们有以下场景:
Consumer1
接收消息基本.get在到达basic_ack
行之前,Consumer2
也得到了这个消息(basic.get
),现在Consumer1
到达了{basic.ack
。
当消费者2到达它的basic.ack
时会发生什么?
由于动作不是原子的,消息是否也会被消费者2处理?在
我的消费者使用python pika的代码逻辑如下:
while true:
m_frame =None
while(m_frame is None):
self.connection.sleep(10)
m_frame,h_frame,body = self.channel.basic_get('test_queue')
self.channel.basic_ack(m_frame.delivery_tag)
[Doing some long logic - couple of minutes]
请注意我不使用基本消费
我不知道这样的循环使用,所以我不知道
否-一条消息将只传递给一个消费者。在
因此,您的场景2根本就不起作用。在
您永远不会让两个使用者处理同一条消息,除非您
nack
将消息传回队列,但无论如何都要继续处理它。在相关问题 更多 >
编程相关推荐