计算机系统应用教程网站

网站首页 > 技术文章 正文

《RabbitMQ》消费者正常运行但队列莫名消失的现象

btikc 2025-02-07 16:40:46 技术文章 16 ℃ 0 评论

背景:Kubernetes微服务容器化平台,客户端为基于node.js版amqp库开发的消息处理服务。

概率:概率出现,在持续一定规格流量下容易出现。

直接原因:客户端接收队列消息的TCP连接缓存溢出导致Channel断链,设置了autoDelete属性的队列在“没有消费者”自动删除了。

根本原因:客户端没有使用消息ACK机制,或者没有设置合理的PrefetchCount值。

解决思路:

1、使用消息确认既ACK机制,并在消息真正处理完毕后向Broker回复ack;

2、设置合理的prefetch count值,避免一次获取的消息量远超自身的处理能力甚至被反噬。

1、2是需要一起支持,确保向Broker反映真实的处理能力。

另外为了保险起见,有些社区开源客户端库本身的缺陷,需要引入探针自愈机制,既

3、客户端对订阅队列进行健康度探针,若在一定时间内不能收到探针消息则认为连接有异常,通过自重启服务来达到线上自愈能力。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表