[英]Rabbitmq one queue multiple consumers
我有多个使用者正在同一个队列上轮询,并每隔X秒检查一次队列,基本上X秒钟后,可能至少有两个使用者可以同时启动basic.get
。
问题是:
1.是否至少有两个消费者同时可以收到相同的消息?
2.根据我的理解,只有basic_ack
会从队列中删除一条消息,所以假设我们有以下情形:
Consumer1
使用basic.get接收味精,并且在到达basic_ack
行之前, Consumer2
也在获取此消息( basic.get
),现在Consumer1
到达basic.ack
,现在只有Consumer2
到达其自己的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
所以我不知道这种用法是否包括轮循获取
1.是否至少有两个消费者同时可以收到相同的消息?
否-一条消息只会传递给单个使用者。
因此,您的方案2根本不起作用。
你永远不会有2名消费者对同样的信息工作,除非你nack
消息回到队列中,但继续反正处理它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.