Rabbitmq单队列多用户

2024-10-02 02:26:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多个消费者在同一个队列上轮询,每隔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]

请注意我不使用基本消费

我不知道这样的循环使用,所以我不知道


Tags: selfnone信息消息getbasic队列场景
1条回答
网友
1楼 · 发布于 2024-10-02 02:26:26

1.If at least two consumers at the same time can get the same message?

否-一条消息将只传递给一个消费者。在

因此,您的场景2根本就不起作用。在

您永远不会让两个使用者处理同一条消息,除非您nack将消息传回队列,但无论如何都要继续处理它。在

相关问题 更多 >

    热门问题