消息积压的处理方法
T00 Lv2

消息积压的原因

MQ 执行有三大阶段:

  1. 消息生产阶段。
  2. 消息存储阶段。
  3. 消息消费阶段。

很显然,消息堆积是出现在第三个消息消费阶段的。

当生产者发送消息的速度超过了消费者处理消息的速度, 或者如果消费者因为某些原因持续阻塞,就会导致队列中的消息堆积,直到队列存储消息达到上限。最早接收到的消息,可能就会成为死信,会被丢弃,这就是消息积压问题

解决办法

如果仅仅是消息堆积,而且发现的及时

  1. 增加更多消费者;
  2. 提高消费速度提高单个消息者的处理能力:在消费者内开启线程池加快消息处理速度;
  3. 使用限流手段,限制生产者生产消息的速度。

如果是bug

  1. 先修好消费者的bug,但是这个时间一般比较久,数据积压严重;
  2. 我们提前建好10倍队列,再编写一个专门用于分发消息的消费者,停掉原来的消费者,用新的消费者将消息发给队列保存;
  3. 最后消息处理完毕之后,寻找服务器空闲时间重新消费消息。
Powered by Hexo & Theme Keep
Total words 55.8k Unique Visitor Page View