前言消息积压产生的原因消息积压问题解决
前言专栏中之前进行了一系列各种模式的配置、使用和测试操作。但是都只是应用于使用阶段,暂未面向问题解决分析方向。
最近看了一篇资料,有大佬说到了消息积压问题的产生原因等问题。对此做出个人见解说明记录。
消息积压产生的原因好记性不如烂笔头!
正常而言,一般的消息从消息产生到消息消费需要经过以下几种阶段。
以Direct模式为例:
消息由生产者产生,比如新订单的创建等,经过交换机,将消息发送至指定的队列中,然后提供给对应的消费者进行消费。
在这个链路中,存在消息积压的原因大致分为以下几种:
1、消费者宕机,导致消息队列中的消息无法及时被消费,出现积压。2、消费者没有宕机,但因为本身逻辑处理数据耗时,导致消费者消费能力不足,引起队列消息积压。3、消息生产方单位时间内产生消息过多,比如“双11大促活动”,导致消费者处理不过来。 消息积压问题解决
针对上面消息积压问题的出现,大致进行了分析,那么根据分析则能制定相关的应对方法。如下所示:
1、大促活动等,导致生产者流量过大,引起积压问题。
提前增加服务器的数量,增加消费者数目,提升消费者针对指定队列消息处理的效率。
2、上线更多的消费者,处理消息队列中的数据。(和1中的大致类似)
3、如果成本有限,则可以专门针对这个队列,编写一个另类的消费者。
当前另类消费者,不进行复杂逻辑处理,只将消息从队列中取出,存放至数据库中,然后basicAck反馈给消息队列。
先记录数据库,后期再慢慢做处理。



