MQ消息堆积因素之一之try catch
最近使用MQ基于两个系统之间做了一次异步的数据同步,对于异常的数据,记录在数据中,方便后续做补偿任务。
上线后,页面功能无法使用,排查原因,因同步了一条数据,如图所示,导致第二个队列消息激增,消费速度太慢,因权限问题,导致页面按钮无法操作。
总结原因:在catch中的代码中,有记录异常数据到db的操作,此操作出现异常,导致后边的手动确认操作无法执行,mq会一直重发,导致消息堆积。
解决办法:
根据排查出同步数据,消费到这条数据,直接return掉。这个是根据业务场景来操作的。
方案:启动多消费者,同时消费消息,减少积压的数据。
代码解决方案:
在catch中的插入操作,再次try catch将异常吃掉,防止重发消息。避免队列调队列。