繁体   English   中英

Rabbitmq排队多个消费者

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM