RabbitMQ queue

本文深入探讨了队列(queue)的基本概念,包括队列监听模式(basic.consume)与轮询模式(basic.get)的区别,以及如何高效地利用这两种模式进行消息处理。详细解释了在多消费者环境下消息的分发策略,以及auto_ack参数对于消息确认机制的影响。同时,文章还讨论了消费者在断开连接或取消订阅时,未确认消息的处理方式。

队列 queue

队列监听模式(basic.comsume):高吞吐量模式

队列轮询获取模式(basic.get):我们不应该在while中循环使用get,来代替监听模式,这会太消耗rabbitmq的性能。一般get使用方案是:basic.get订阅消息 -> 获取单条消息 -> 取消订阅。

一个queue被多个consumer消费时,一个消息只会随机的分发到某个消费者一次;

消费者确认消息:

队列配置为auto_ack=false时,当队列把消息发送给消费者后,消费者处理了消息,向队列回复一个basic.ack,此时队列才把对应的消息删除,否则消息处于Unacked状态;

auto_ack设置为true时,一旦队列把消息发送给了消费者,立即删除队列中的这条消息

如果在ack之前,consumer断开连接或者取消订阅,消息会发送给其它consumer(多于一个的consumer);如果consumer存在bug没有ack,队列不会给consumer再推送消息了(认为consumer没有注备好处理下一条消息;这里又牵扯到消息利用率,设置较大的的prefetch会提高消息利用率)。

注意:(1)队列不会因为unacked的时间太长,就发送给其它consumer,而是该consumer主动断开、取消订阅才触发
(2)消费者发送basic.ack的确认消息并不是告诉生产者消息已经被消费了,生产者和消费者是完全没有关系的

basic.reject
requeue
exclusive
auto-delete

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值