Несколько потребителей и производителей подключены к очереди сообщений. Возможно ли это в 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-обсудить.

Другие вопросы по тегам