RabbitMQ queue

队列 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

 

猜你喜欢

转载自blog.csdn.net/ShuaiFanPi/article/details/88573859