RabbitMQ 之消息积压

1. 什么是消息积压

当消息数量不断增大,超过了消费者的消费能力,就会造成消息一直存放在队列中无法被消费。

2. 为什么会产生消息积压

  • 生产者生产消息过快:生产者发送消息的速度超过了消费者消费消息的速度,就会造成消费者无法即时消费新消息,导致消息堆积
  • 消费者消费消息速度过慢:
    • 消费消息的业务逻辑复杂,耗时长
    • 消费者代码性能低
    • 内存、CPU 等资源限制
    • 消费者代码出现异常
  • 网络原因:网络不稳定或延迟,导致消费者发送的 ack 无法被服务器接收或丢失,若设置了消息重新入队列,就会造成消息重新发送,也会造成消息积压
  • RabbitMQ 服务器配置偏低

3. 如何处理消息积压

  • 提高消费者消费效率:
    • 优化消费者代码逻辑
    • 设置 prefetch 参数,限制队列最多能容纳消息的数量
    • 当处理消息发生异常时,将消息放入死信队列
  • 降低生产者发送消息的速度:
    • 流量控制:根据消费者处理消息的速率,动态控制生产者发送消息的速率
    • 限流:使用限流工具,为消息发送速率设置一个上限
  • 升级 RabbitMQ 服务器配置
相关推荐
在未来等你1 小时前
RabbitMQ面试精讲 Day 14:Federation插件与数据同步
中间件·面试·消息队列·rabbitmq
会编程的林俊杰3 小时前
Redisson中的分布式锁
redis·分布式·redisson
我爱娃哈哈6 小时前
分布式事务在分片场景下,TCC和Seata到底怎么选?一线实战全解析!
分布式·后端
Pitayafruit10 小时前
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
redis·分布式·后端
久念祈10 小时前
C++ - 仿 RabbitMQ 实现消息队列--客户端模块实现
分布式·rabbitmq
Code季风11 小时前
分布式系统中的幂等性设计:从理论到实现的全面指南
redis·分布式·微服务
dessler11 小时前
RabbitMQ-日常运维命令
linux·运维·rabbitmq
都叫我大帅哥12 小时前
RabbitMQ惰性队列:拯救内存的“树懒”战士 🦥
java·rabbitmq
右手嘚温暖18 小时前
分布式事务Seata、LCN的原理深度剖析
spring boot·分布式·后端·spring·spring cloud·中间件·架构