RabbitMQ 的 prefetch 机制?

发布于

一、定义

prefetch(QoS)控制 RabbitMQ 一次推送给消费者多少条未确认的消息,实现限流和负载均衡。

二、设置

channel.basicQos(10); // 每个消费者最多 10 条未确认消息

三、作用

  • 防止消息都推给快的消费者,慢的消费者闲置,实现公平分发。
  • 防止消费者内存被大量未处理消息占满。

四、三种范围

  • prefetchCount=0:不限。
  • channel.basicQos(prefetchSize, prefetchCount, global)。
  • global=false:每个消费者限制。
  • global=true:整个 channel 限制。

五、注意

prefetch 只对手动 ACK 模式有效,自动 ACK 下消息立即从队列移除,无限制。