1. 什么是消息积压
当消息数量不断增大,超过了消费者的消费能力,就会造成消息一直存放在队列中无法被消费。
2. 为什么会产生消息积压
- 生产者生产消息过快:生产者发送消息的速度超过了消费者消费消息的速度,就会造成消费者无法即时消费新消息,导致消息堆积
- 消费者消费消息速度过慢:
- 消费消息的业务逻辑复杂,耗时长
- 消费者代码性能低
- 内存、CPU 等资源限制
- 消费者代码出现异常
- 网络原因:网络不稳定或延迟,导致消费者发送的 ack 无法被服务器接收或丢失,若设置了消息重新入队列,就会造成消息重新发送,也会造成消息积压
- RabbitMQ 服务器配置偏低
3. 如何处理消息积压
- 提高消费者消费效率:
- 优化消费者代码逻辑
- 设置 prefetch 参数,限制队列最多能容纳消息的数量
- 当处理消息发生异常时,将消息放入死信队列
- 降低生产者发送消息的速度:
- 流量控制:根据消费者处理消息的速率,动态控制生产者发送消息的速率
- 限流:使用限流工具,为消息发送速率设置一个上限
- 升级 RabbitMQ 服务器配置