Несколько потребителей и производителей подключены к очереди сообщений. Возможно ли это в AMQP?
Я хотел бы создать ферму процессов, способных распознавать текст. Я думал об использовании одной очереди сообщений, которая читается несколькими процессами OCR.
Я хотел бы убедиться, что:
- каждое сообщение в очереди в конечном итоге обрабатывается
- работа более или менее равномерно распределена
- изображение будет проанализировано только одним процессом распознавания
- Процесс OCR не будет получать несколько сообщений одновременно (так что любой другой бесплатный процесс OCR может обработать сообщение).
Можно ли это сделать с помощью AMQP?
Я планирую использовать Python и Rabbitmq
2 ответа
Да, это возможно Кластер серверов для MMO-игры в реальном времени, над которой я работаю, работает таким образом. Мы используем ActiveMQ, но я думаю, что все это возможно и с RabbitMQ.
Все предметы, которые вы упомянули, вы получаете из коробки, кроме последнего.
- каждое сообщение в очереди в конечном итоге обрабатывается - это одна из основных обязанностей брокеров сообщений
- работа более или менее равномерно распределена - это еще одна:)
- изображение будет проанализировано только одним процессом OCR - для этого существует различие /topic и /queue. Темы похожи на сигналы вещания, очереди - это задачи. Вам нужна / очередь в вашем сценарии
Чтобы заставить последний работать желаемым образом, потребители отправляют специфический для AMQ аргумент при подписке на очередь:
activemq.prefetchSize: 1
Этот параметр гарантирует, что потребитель не будет принимать больше сообщений после того, как он получил одно, и пока он не отправит ack
в AMQ. Я считаю, что нечто подобное существует в RabbitMQ.
Да, как указывает @nailxx. Модель программирования AMQP немного отличается от JMS в том, что у вас есть только очереди, которые могут быть разделены между работниками или использоваться в частном порядке одним работником. Вы также можете легко настроить RabbitMQ для использования сценариев использования PubSub или того, что в JMS называется темами. Перейдите на нашу страницу " Начало работы" на веб-сайте RabbitMQ, чтобы найти массу полезной информации об этом.
Теперь, в частности, для вашего случая использования уже имеется множество инструментов. Одним из тех, что люди часто используют, и это хорошо поддерживается, является сельдерей. Вот сообщение в блоге об этом, которое, я думаю, поможет вам начать:
Если у вас есть какие-либо вопросы, пожалуйста, напишите нам или напишите в список рассылки rabbitmq-обсудить.