RabbitMQ 之消息积压

1. 什么是消息积压

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

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

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

3. 如何处理消息积压

  • 提高消费者消费效率:
    • 优化消费者代码逻辑
    • 设置 prefetch 参数,限制队列最多能容纳消息的数量
    • 当处理消息发生异常时,将消息放入死信队列
  • 降低生产者发送消息的速度:
    • 流量控制:根据消费者处理消息的速率,动态控制生产者发送消息的速率
    • 限流:使用限流工具,为消息发送速率设置一个上限
  • 升级 RabbitMQ 服务器配置
相关推荐
用户83071968408216 小时前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
用户8307196840823 天前
RabbitMQ vs RocketMQ 事务大对决:一个在“裸奔”,一个在“开挂”?
后端·rabbitmq·rocketmq
初次攀爬者4 天前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
初次攀爬者6 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
让我上个超影吧7 天前
消息队列——RabbitMQ(高级)
java·rabbitmq
塔中妖7 天前
Windows 安装 RabbitMQ 详细教程(含 Erlang 环境配置)
windows·rabbitmq·erlang
断手当码农7 天前
Redis 实现分布式锁的三种方式
数据库·redis·分布式
初次攀爬者7 天前
Redis分布式锁实现的三种方式-基于setnx,lua脚本和Redisson
redis·分布式·后端
业精于勤_荒于稀7 天前
物流订单系统99.99%可用性全链路容灾体系落地操作手册
分布式
Ronin3057 天前
信道管理模块和异步线程模块
开发语言·c++·rabbitmq·异步线程·信道管理