Очередь на Direct Exchange с несколькими потребителями лучше всего подходит для этого сценария.
Используйте метод basicQos с настройкой prefetchCount = 1.
Это говорит RabbitMQ не передавать более одного сообщения работнику за раз. Или, другими словами, не отправляйте новое сообщение работнику, пока оно не обработает и не подтвердит предыдущее. Вместо этого он отправит его следующему работнику, который еще не занят.
Java-код:
channel.basicQos(1);
Для более подробной информации:
https://www.rabbitmq.com/tutorials/tutorial-two-java.html