Несколько потребителей и производителей подключены к очереди сообщений. Возможно ли это в AMQP? - PullRequest
4 голосов
/ 29 января 2010

Я хотел бы создать ферму процессов, способных распознавать текст. Я думал об использовании одной очереди сообщений, которая читается несколькими процессами OCR.

Я хотел бы убедиться, что:

  • каждое сообщение в очереди в конечном итоге обрабатывается
  • работа более или менее равномерно распределена
  • изображение будет проанализировано только одним процессом OCR
  • Процесс распознавания не может получить несколько сообщений одновременно (так что любой другой бесплатный процесс распознавания может обработать сообщение).

Можно ли это сделать с помощью AMQP?

Я планирую использовать python и rabbitmq

Ответы [ 2 ]

5 голосов
/ 17 февраля 2010

Да, как указывает @nailxx. Модель программирования AMQP немного отличается от JMS тем, что у вас есть только очереди , которые могут быть разделены между работниками или использованы в частном порядке одним работником. Вы также можете легко настроить RabbitMQ для использования PubSub вариантов использования или того, что в JMS называется themes . Перейдите на нашу страницу Getting Started на веб-сайте RabbitMQ , чтобы найти массу полезной информации об этом.

Теперь, в частности, для вашего случая использования уже доступно множество инструментов. То, что люди часто используют, и это хорошо поддерживается, это Сельдерей . Вот сообщение в блоге об этом, которое, я думаю, поможет вам начать:

Если у вас есть какие-либо вопросы, пожалуйста, напишите нам или напишите в список рассылки rabbitmq-обсудить.

3 голосов
/ 29 января 2010

Да, это возможно. Кластер серверов для MMO-игры в реальном времени, над которой я работаю, работает таким образом. Мы используем ActiveMQ, но я думаю, что все это возможно и с RabbitMQ.

Все предметы, которые вы упомянули, вы получаете из коробки, кроме последнего.

  • каждое сообщение в очереди в конечном итоге обрабатывается - это одна из основных обязанностей брокеров сообщений
  • работа более или менее равномерно распределена - это еще одна:)
  • изображение будет проанализировано только одним процессом OCR - для этого существует различие / topic и / queue. Темы похожи на широковещательные сигналы, очереди - это задачи. Вам нужна / queue в вашем сценарии

Чтобы заставить последнюю работать должным образом, потребители отправляют специфический для AMQ аргумент при подписке на очередь:

activemq.prefetchSize: 1

Этот параметр гарантирует, что потребитель не будет принимать больше сообщений после того, как получил одно, и пока не отправит ack в AMQ. Я считаю, что нечто подобное существует в RabbitMQ.

...