Rabbitmq 一个队列多个消费者
Rabbitmq one queue multiple consumers
我有多个消费者在同一个队列上进行轮询,并且每隔 X 秒检查一次队列,基本上在 X 秒后可能至少有两个消费者可以同时启动 basic.get
.
问题是:
1.If 至少两个消费者同时获取同一条消息?
2.According据我所知只有basic_ack
会从队列中删除一条消息,所以假设我们有以下场景:
Consumer1
使用 basic.get 获取消息,在到达 basic_ack
行之前,Consumer2
也收到此消息 (basic.get
),现在 Consumer1
达到了 basic.ack
,现在 Consumer2
达到了它自己的 basic.ack
。
当 Consumer2 达到其 basic.ack
时会发生什么?
消息是否也会由 Consumer2 处理,因为操作不是原子的?
我的消费者使用python鼠兔的代码逻辑如下:
虽然正确:
m_frame =None
while(m_frame 是 None):<br>
self.connection.sleep(10)
m_frame,h_frame,正文=self.channel.basic_get('test_queue')
self.channel.basic_ack(m_frame.delivery_tag)
[做一些长逻辑——几分钟]
请注意,我不使用 basic.consume
所以我不知道这种用法是否包含循环获取
1.If at least two consumers at the same time can get the same message?
否 - 一条消息只会传送给一个消费者。
因此,您的场景 #2 根本没有发挥作用。
你永远不会有 2 个消费者处理同一条消息,除非你 nack
将消息返回到队列但仍然继续处理它。
我有多个消费者在同一个队列上进行轮询,并且每隔 X 秒检查一次队列,基本上在 X 秒后可能至少有两个消费者可以同时启动 basic.get
.
问题是:
1.If 至少两个消费者同时获取同一条消息?
2.According据我所知只有basic_ack
会从队列中删除一条消息,所以假设我们有以下场景:
Consumer1
使用 basic.get 获取消息,在到达 basic_ack
行之前,Consumer2
也收到此消息 (basic.get
),现在 Consumer1
达到了 basic.ack
,现在 Consumer2
达到了它自己的 basic.ack
。
当 Consumer2 达到其 basic.ack
时会发生什么?
消息是否也会由 Consumer2 处理,因为操作不是原子的?
我的消费者使用python鼠兔的代码逻辑如下:
虽然正确:
m_frame =None
while(m_frame 是 None):<br>
self.connection.sleep(10)
m_frame,h_frame,正文=self.channel.basic_get('test_queue')
self.channel.basic_ack(m_frame.delivery_tag)
[做一些长逻辑——几分钟]
请注意,我不使用 basic.consume
所以我不知道这种用法是否包含循环获取
1.If at least two consumers at the same time can get the same message?
否 - 一条消息只会传送给一个消费者。
因此,您的场景 #2 根本没有发挥作用。
你永远不会有 2 个消费者处理同一条消息,除非你 nack
将消息返回到队列但仍然继续处理它。