【rabbitmq的消息堆积问题】


RabbitMQ一直以来都有一个缺点,就是对于消息堆积问题的处理不好。当RabbitMQ中有大量消息堆积时,整体性能会严重下降。而目前新推出的Quorum队列以及Stream队列,目的就在于解决这个核心问题。但是这两种队列的稳定性和周边生态都还不够完善,因此,在使用RabbitMQ时,还是要非常注意消息堆积的问题。尽量让消息的消费速度和生产速度保持一致。

而如果确实出现了消息堆积比较严重的场景,就需要从数据流转的各个环节综合考虑,设计适合的解决方案。

消息生产者端:

对于生产者端,最明显的方式自然是降低消息生产的速度。但是,生产者端产生消息的速度通常是跟业务息息相关的,一般情况下不太好直接优化。但是可以选择尽量多采用批量消息的方式,降低IO频率。

RabbitMQ服务端:

RabbitMQ本身其实也在着力于提高服务端的消息堆积能力。对于消息堆积严重的队列,可以预先添加懒加载机制,或者创建Sharding分片队列,这些措施都有助于优化服务端的消息堆积能力。另外,尝试使用Stream队列,也能很好的提高服务端的消息堆积能力。

消息消费者端:

要提升消费速度最直接的方式,就是增加消费者数量了。尤其当消费端的服务出现问题,已经有大量消息堆积时。这时,可以尽量多的申请机器,部署消费端应用,争取在最短的时间内消费掉积压的消息。但是这种方式需要注意对其他组件的性能压力。

对于单个消费者端,可以通过配置提升消费者端的吞吐量。

ini 复制代码
# 单次推送消息数量 
spring.rabbitmq.listener.simple.prefetch=1 
# 消费者的消费线程数量 
spring.rabbitmq.listener.simple.concurrency=5

灵活配置这几个参数,能够在一定程度上调整每个消费者实例的吞吐量,减少消息堆积数量。

当确实遇到紧急状况,来不及调整消费者端时,可以紧急上线一个消费者组,专门用来将消息快速转录。保存到数据库或者Redis,然后再慢慢进行处理。

相关推荐
唯余木叶下弦声6 小时前
Python连接Kafka收发数据等操作
大数据·分布式·python·kafka
Dylanioucn6 小时前
【分布式微服务云原生】详细介绍下dubbo和springcloud所能支持的微服务特性,为啥能支持的技术原理,以及适用的业务场景,并对两者各方面做个详细的比较
分布式·微服务·云原生
编啊编程啊程8 小时前
一文上手Kafka【下】
java·分布式·中间件·kafka
夏微凉.9 小时前
【RabbitMQ】RabbitMQ 的概念以及使用RabbitMQ编写生产者消费者代码
linux·学习·rabbitmq
液态不合群10 小时前
记一次 RabbitMQ 消费者莫名消失问题的排查
分布式·rabbitmq
张某布响丸辣10 小时前
Kafka与RabbitMQ:深入理解两者之间的区别
分布式·kafka·rabbitmq
lucky.麒麟10 小时前
Docker搭建 RabbitMQ 最新版
docker·容器·rabbitmq
蒲公英的孩子13 小时前
并行程序设计基础——MPI接口一览
linux·c语言·分布式·负载均衡
安科瑞 华楠14 小时前
安科瑞Acrel-1000DP分布式光伏监控系统在鄂尔多斯市鄂托克旗巴音乌苏六保煤矿5MW分布式光伏项目中的应用
分布式
明达技术15 小时前
探索分布式IO模块的介质冗余:赋能工业自动化的稳健之心
运维·分布式·自动化