消息积压的处理方法
消息积压的原因
MQ 执行有三大阶段:
- 消息生产阶段。
- 消息存储阶段。
- 消息消费阶段。
很显然,消息堆积是出现在第三个消息消费阶段的。
当生产者发送消息的速度超过了消费者处理消息的速度, 或者如果消费者因为某些原因持续阻塞,就会导致队列中的消息堆积,直到队列存储消息达到上限。最早接收到的消息,可能就会成为死信,会被丢弃,这就是消息积压问题
解决办法
如果仅仅是消息堆积,而且发现的及时
- 增加更多消费者;
- 提高消费速度提高单个消息者的处理能力:在消费者内开启线程池加快消息处理速度;
- 使用限流手段,限制生产者生产消息的速度。
如果是bug
- 先修好消费者的bug,但是这个时间一般比较久,数据积压严重;
- 我们提前建好10倍队列,再编写一个专门用于分发消息的消费者,停掉原来的消费者,用新的消费者将消息发给队列保存;
- 最后消息处理完毕之后,寻找服务器空闲时间重新消费消息。