赞
踩
如果队列使用的是手动ack,但在接收消息后不做任何ack处理,RabbitMQ会把消息标记为 unacked
,unacked状态的消息不会被消费,并且占用RabbirMQ资源,只有当消费者channel断开或者服务器重启,消息才会重新回到ready状态被其他消费者消费。
确认签收后,消息从队列中删除。
自动ack
消费者接收到消息的那一刻就发送ack信息到RabbitMQ的队列,队列将此条消息删除。
自动ack的方式只要队列有消息,RabbitMQ会源源不断的把消息推送给客户端,而不管客户端能否消费的完。
手动ack
开发人员决定什么时机进行ack。
如果没有及时进行ack
,RabbitMQ会将来不及做ack的消息标记为unacked
丢回RabbitMQ,被标记为unacked的消息无法被立刻重新消费,而是要等channel重启或者服务器重启才会变成ready
(可消费的消息)。但等待服务器重启这个过程中如果积压了太多unacked消息,会导致MQ响应越来越慢,甚至崩溃的问题。
解决方式就是及时处理消息
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。