RabbitMQ系列5:服务端和消费端流控

本文探讨了MQ消息队列中生产速度远大于消费速度时产生的性能问题,并提出了有效的流量控制措施。主要包括服务端的队列长度控制、内存及磁盘控制等方法;以及消费端的prefetchcount设置,通过限制消费者端未确认的消息数量来达到流量控制的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果MQ消息的生产速度远远大于消费速度,会产生大量任务堆积,导致性能下降。该如何控制流量呢?可从以服务端和消费端两个方面来考虑。

1.服务端流控

队列有两个控制长度的属性:x-max-length,x-max-length-bytes,分别表示队列中最大存储消息数和消息容量。只要有一个超了,队头的消息会被丢弃。但是这个不能真正实现限流。
另外两种方法是内存控制和磁盘控制。内存控制就是当MQ占物理内存超过40%就主动抛出内存警告并阻塞所有连接,这个可以通过配置来修改的。磁盘控制,就是磁盘剩余可用空间低于默认值50MB时触发,这个也可以设置。

2.消费端流控

在push模式下,消费端也可能因为接收太多,无法及时处理而需要对其进行控制。
这个可以基于Consumer或者Channel设置 prefetch count的值,表示Consumer端的最大unached messages数目。当超过这个数值的消息未被确认,MQ会停止投递新的消息给该消费者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纵横千里,捭阖四方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值