Prefetch decides whether one slow consumer blocks the rest

RabbitMQ pushes messages to a consumer up to the prefetch limit without waiting for acknowledgements. With the default of unlimited, one consumer takes the whole queue into its local buffer and the others sit idle.

$channel->basic_qos(
    null,   // prefetch size, in bytes — leave null
    1,      // prefetch count: one unacknowledged message at a time
    null
);

A prefetch of 1 gives the fairest distribution and the most round trips, which is right when messages are slow and uneven. For fast, uniform messages a higher number amortises the network cost — 10 to 100 is the usual range. The failure it prevents is specific and common: three workers, one queue, and two of them doing nothing while the first works through a buffered thousand.