【发布时间】:2016-09-05 21:20:17
【问题描述】:
我有多个消费者在同一个队列上轮询,并且每隔 X 秒检查一次队列,基本上在 X 秒之后,可能至少有两个消费者可以同时启动 basic.get。
问题是:
1.如果至少有两个消费者同时可以得到相同的消息?
2.据我了解只有basic_ack会从队列中删除一条消息,所以假设我们有以下场景:
Consumer1 使用 basic.get 接收 msg,在到达 basic_ack 行之前,Consumer2 也收到此消息 (basic.get),现在 Consumer1 到达 basic.ack,现在才到达 @987654329 @ 达到自己的basic.ack。
当 Consumer2 到达其basic.ack 时会发生什么?
消息是否也会由 Consumer2 处理,因为操作不是原子的?
我的消费者使用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]
请注意,我不使用 basic.consume
所以我不知道这种用法是否包含循环提取
【问题讨论】:
标签: python python-2.7 rabbitmq pika