== RabbitMQ: consumers scale, and prefetch decides whether they actually do ==

one queue, 40 messages, 5 consumers, each taking 10 ms per message

no basicQos at all (unlimited prefetch, the AMQP default):
  consumer-1 -> 40 messages
  consumer-2 -> 0 messages
  consumer-3 -> 0 messages
  consumer-4 -> 0 messages
  consumer-5 -> 0 messages
  consumers that received nothing : 4

basicQos(1):
  consumer-1 -> 8 messages
  consumer-2 -> 9 messages
  consumer-3 -> 8 messages
  consumer-4 -> 8 messages
  consumer-5 -> 7 messages
  consumers that received nothing : 0

Every consumer on a queue competes for the same messages, so adding
consumers adds throughput and there is no structural ceiling of the kind
Kafka's partition count imposes. But with the AMQP default the broker
pushes as many messages as a consumer will take, so whichever consumer
connects first can be handed the entire backlog while the others sit idle.
basicQos is not a tuning knob you get to postpone; it is what makes the
fan-out real. Spring AMQP sets it for you --
AbstractMessageListenerContainer.DEFAULT_PREFETCH_COUNT is 250 -- which is
better than unlimited and still large enough to concentrate a small
backlog on one consumer.

The price of all this is the ordering measurement: there is no key, so
nothing constrains related messages to one consumer.

