RabbitMQ 的 prefetch 机制?
RabbitMQ 面试题发布于
一、定义
prefetch(QoS)控制 RabbitMQ 一次推送给消费者多少条未确认的消息,实现限流和负载均衡。
二、设置
channel.basicQos(10); // 每个消费者最多 10 条未确认消息
三、作用
- 防止消息都推给快的消费者,慢的消费者闲置,实现公平分发。
- 防止消费者内存被大量未处理消息占满。
四、三种范围
- prefetchCount=0:不限。
- channel.basicQos(prefetchSize, prefetchCount, global)。
- global=false:每个消费者限制。
- global=true:整个 channel 限制。
五、注意
prefetch 只对手动 ACK 模式有效,自动 ACK 下消息立即从队列移除,无限制。