RabbitMQ消息确认机制
2013-11-13 11:18
302 查看
RabbitMQ消息确认机制
打印本文
为了保证消息从队列可靠地到达消费者,RabbitMQ提供消息确认机制(message acknowledgment)。消费者在声明队列时,可以指定noAck参数,当noAck=false时,RabbitMQ会等待消费者显式发回ack信号后才从内存(和磁盘,如果是持久化消息的话)中移去消息。否则,RabbitMQ会在队列中消息被消费后立即删除它。
采用消息确认机制后,只要令noAck=false,消费者就有足够的时间处理消息(任务),不用担心处理消息过程中消费者进程挂掉后消息丢失的问题,因为RabbitMQ会一直持有消息直到消费者显式调用basicAck为止。
当noAck=false时,对于RabbitMQ服务器端而言,队列中的消息分成了两部分:一部分是等待投递给消费者的消息;一部分是已经投递给消费者,但是还没有收到消费者ack信号的消息。如果服务器端一直没有收到消费者的ack信号,并且消费此消息的消费者已经断开连接,则服务器端会安排该消息重新进入队列,等待投递给下一个消费者(也可能还是原来的那个消费者)。
RabbitMQ不会为未ack的消息设置超时时间,它判断此消息是否需要重新投递给消费者的唯一依据是消费该消息的消费者连接是否已经断开。这么设计的原因是RabbitMQ允许消费者消费一条消息的时间可以很久很久。
RabbitMQ管理平台界面上可以看到当前队列中Ready状态和Unacknowledged状态的消息数,分别对应上文中的等待投递给消费者的消息数和已经投递给消费者但是未收到ack信号的消息数。
也可以通过命令行查看上述信息:
1 2 3 4 5 | $ rabbitmqctl list_queues name messages_ready messages_unacknowledged messages Listing queues ... test_queue1 3 2 5 test_queue2 1 0 1 ...done. |
相关文章推荐
- RabbitMQ-消息确认机制(事务+confirm)
- RabbitMQ集群和消息传递确认机制
- RabbitMQ之消息确认机制AMQP事务
- RabbitMQ使用场景练习:消息确认机制(十一)
- RabbitMQ消息队列(九):Publisher的消息确认机制
- spring rabbitmq 消息确认机制和事务支持
- rabbitmq 消息确认机制
- (六)RabbitMQ消息队列-消息任务分发与消息ACK确认机制(PHP版)
- (转)RabbitMQ消息队列(九):Publisher的消息确认机制
- RabbitMQ - Publisher的消息确认机制
- RabbitMQ消息队列(九):Publisher的消息确认机制
- RabbitMQ消息队列(九):Publisher的消息确认机制
- RabbitMQ之消息确认机制(事务+Confirm) - 朱小厮的博客 - CSDN博客
- RabbitMQ使用场景练习:消息确认机制(十一)
- RabbitMQ 消息确认机制
- RabbitMQ消息队列(九):Publisher的消息确认机制
- RabbitMQ(三)消息确认机制(事务+Confirm)
- RabbitMQ 消息持久化、事务、Publisher的消息确认机制
- RabbitMQ之消息确认机制(事务+Confirm)
- RabbitMQ之消息确认机制(事务+Confirm)