05-RabbitMQ消息积压处理
1.什么是消息积压
消息积压是指信息消费的速度小于生产的速度,从而造成消息积累过多,对服务器产生影响;
2.消息积压产生的原因
1)流量变大,而RabbitMQ服务器配置偏低,导致消息产生速度大于消费速度;
2)消费者故障,从而消息只增不减;
3)程序逻辑设计有问题,导致生产者持续生产消息,而消费者不消费或者消费慢;
3.产生消息积压时如何解决
- 对于资源不足够的情况可以采用扩容方式。
- 纵向扩容,即增加服务器资源,该加内存加内存,该加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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需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"