生产环境遇到的rabbitmq队列堆积原因分析和解决方案
在8月5、6、7连续三天晚上10点出现充值相关几个消息堆积的问题,经过分析发现主要问题是充值项目对mq的使用存在一些不合理的地方,当mq负载高时会出现堆积现象。
具体原因如下:
1、采用的消息模式是get模式,而不是高效的deliver模式,经过在新搭建的mq服务器测试发现,get模式:5000条/秒便会出现严重堆积, deliver模式:20000条/秒不会堆积,如果按照充值项目的写法由于存在后续的问题,每秒几百条的写入就会经常出现消息堆积;
2、消息的生产和消费共用mq链接和channel
a) 共用链接会导致:当触发mq的限流控制时,阻塞消费;
b) mq的客户端channel实现为避免消息乱窜会大量加lock,把并行变为串行,当写阻塞时,相当于也阻塞了读,相反一样。
3、不同队列共用链接和channel,会出现队列相互影响的问题。
以上问题是相关技术人员对rabbitmq不了解,采用了get模式,并且希望封装一个连接池,结果封装的有问题导致队列和消息之间相互影响,从而把一个火箭变成了一只蜗牛。
严重建议使用deliver模式。
相关推荐
程序员伊成 2020-08-06
waitzkj 2020-07-25
powrexly 2020-07-20
waitzkj 2020-07-18
shenzhenzsw 2020-06-21
Soongp 2020-06-07
waitzkj 2020-06-04
cj0 2020-06-01
zhangtianshun 2020-06-09
cj0 2020-05-11
陈晨软件五千言 2020-06-11
zry 2020-05-28
wbingyang 2020-05-26
isHooky 2020-05-15
shenzhenzsw 2020-05-09
OnMyHeart 2020-05-09
憧憬 2020-05-02
fansenjun 2020-04-27