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 将消息返回到队列但仍然继续处理它。