Да, это возможно. Кластер серверов для MMO-игры в реальном времени, над которой я работаю, работает таким образом. Мы используем ActiveMQ, но я думаю, что все это возможно и с RabbitMQ.
Все предметы, которые вы упомянули, вы получаете из коробки, кроме последнего.
- каждое сообщение в очереди в конечном итоге обрабатывается - это одна из основных обязанностей брокеров сообщений
- работа более или менее равномерно распределена - это еще одна:)
- изображение будет проанализировано только одним процессом OCR - для этого существует различие / topic и / queue. Темы похожи на широковещательные сигналы, очереди - это задачи. Вам нужна / queue в вашем сценарии
Чтобы заставить последнюю работать должным образом, потребители отправляют специфический для AMQ аргумент при подписке на очередь:
activemq.prefetchSize: 1
Этот параметр гарантирует, что потребитель не будет принимать больше сообщений после того, как получил одно, и пока не отправит ack
в AMQ. Я считаю, что нечто подобное существует в RabbitMQ.