05-RabbitMQ消息积压处理

1.什么是消息积压

消息积压是指信息消费的速度小于生产的速度,从而造成消息积累过多,对服务器产生影响;

2.消息积压产生的原因

1)流量变大,而RabbitMQ服务器配置偏低,导致消息产生速度大于消费速度;
2)消费者故障,从而消息只增不减;
3)程序逻辑设计有问题,导致生产者持续生产消息,而消费者不消费或者消费慢;

3.产生消息积压时如何解决

  1. 对于资源不足够的情况可以采用扩容方式。
  • 纵向扩容,即增加服务器资源,该加内存加内存,该加CPU加CPU;
  • 横向扩容,即将单机改为集群模式,增加集群节点,并且增加消费者数量,让消费速度快起来。

2.程序代码存在异常致使消费端宕机,从而造成了消息积压;
3.消费逻辑是否过于冗余,造成内存和CPU使用均正常,但是消息消费速度过缓的问题。

4.流量控制

服务端流量控制

  • 内存层面
    • 增加内存判断,超过内存限制,停止接收或者发送消息
    • 通过修改消息队列服务器配置,默认RabbitMQ服务占用内存40%的时候,MQ会主动抛出一个阻塞链接的错误。通过修改RabbitMQ的rabbit.config文件进行调整
[{rabbit, [{vm_memory_high_watermark, 0.4}]}].
  • 磁盘控制
    • 当磁盘空间低于指定值时触发,触发流控措施。
disk_free_limit.relative = 3.0
disk_free_limit.absolute = 2GB

消费端流量控制

  • 消费端信息过多可能造成消费端服务异常,影响其他进程或者产生OOM异常;
  • 可以在消费端或者channel设置fetchCount,表示消费端的最大uack的信息的数量;当超过这个数量时,RabbitMQ就不会投放信息给消费者
  • 消费者代码中配置
channel.basicQos(2); // 如果超过 2 条消息没有发送 ACK,当前消费者不再接受队列消息
channel.basicConsume(QUEUE_NAME, false, consumer)
  • yml配置
spring.rabbitmq.listener.simple.prefetch=2

参考博客地址:https://baijiahao.baidu.com/s?id=1737713844357727373&wfr=spider&for=pc

posted @   PerfectLi  阅读(363)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
历史上的今天:
2020-08-17 vue-router.esm.js: Error: "Loading chunk 0 failed"
点击右上角即可分享
微信分享提示