admin 管理员组文章数量: 887032
2023年12月25日发(作者:虚拟机安装linux系统报错)
今天一到公司,就发现某个业务的回调全部没有处理,打开
RabbitMQ Management 查看 Queue 发现有两个状态为
Unacked 的消息。
这个状态的产生是因为消费者处理消息,还没有给 Rabbit 应答,没有应答的原因可能是有异常没有捕获。如果 Unacked 的数量大于或等于消费者的线程数时,其他消息就不会被消费,导致积压。当程序断开与 RabbitMQ 的链接后,Unacked 的消息状态会重新变为
Ready 等待消费。从上图可以看到,我这个 Queue 只有两个消费线程,Unacked 消息也有两个,于是其他消息就不会被处理。(故障时
Ready 消息有好几百个,没截图)
既然知道了原因,那就好解决了,先增加回调的异常捕获,异常处理完成后,回复应答即可。
ck(sageProperties().getDeliveryTag(), true);
因为业务比较着急,我这里先通过增加消费线程临时解决了。
一般来说,如果队列中 Ready 状态的消息数比较多,可以认为是消费者的处理能力不足,可以通过增加消费者来解决;而 Unacked
消息较多除了可能消费者处理能力不足外,还可能是消费者取走消息后,由于某种原因没有做消息应答,需要根据情况处理。
版权声明:本文标题:由Unacked 引起的 RabbitMQ 消费问题 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1703457055h452203.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论