记一次rabbitmq队列阻塞

发布时间 2023-09-14 12:13:43作者: 元点

一,问题

通过rabbitmq可视化界面看到其中有一个队列未消费数量有5万多,而且在持续增加中

二,分析

1,上网了解了rabbitmq原理后,从未消费的队列中看到unacked一直没有变化,而consumers中有存在消费者,所以应该是程序有收到消息,却一直卡主,没有返回ack给rabbitmq。

2,通过不断测试后发现,程序中确实有一个会发生堵塞地方,就是tcp链接中readline方法。但是readline不会无缘无故堵塞,经测试程序每次都会write命令数据给服务器,而当特殊情况服务器强制断开客户端链接后,客户端再次重连后,readline就会堵塞,经发现是write数据时没有加上结束标志“\r\n”,导致readline时程序以为还有数据未读取一直堵塞。

三,解决问题

知道了原因,就好解决了,就是每次write数据时加上“\r\n”,自此问题解决