2017-02-15 9 views
2

Я использую RabbitMQ для отправки сообщений от symfony до nodeJs. Я бы сказал, что требуется параллельная обработка.RabbitMQ - параллельная задача, потребляющая

У меня есть работа на клиента, которая может занять от 5 минут до 70 минут, чтобы завершить в зависимости от объема данных, которые будут обрабатываться для данного клиента. Клиент может публиковать запрос задания произвольно.

Давайте предположим, что 5 клиентов размещать свою работу с тем временем, необходимым для выполнения соответствующей работы является, как указано ниже

client1 работы - 65 минут client2 работы - 10 минут client3 работы - 5 минут client4 работы - 10 minsclient5 job - 20 mins У нормальной очереди есть проблема, так как работа клиента1 будет завершена, а клиент должен ждать 75 минут (65 + 10), чтобы выполнить задание, которое занимает 10 минут.

Я знаю, что в RabbitMQ я могу создать много рабочих для обработки этого задания, но в зависимости от времени, которое требуется для задания и положения задания в очереди, может потребоваться много времени для получения клиентом их работа выполнена.

Так что я ищу для создания динамических потребителей на клиента. И каждый потребитель выполняет работу для каждого клиента индивидуально.

Возможно ли это в Rabbitmq? Если да, как это можно достичь?

enter image description here

+0

Я не специалист по узлу, но я думал, что это разрешено для асинхронной обработки? Не могли бы вы прослушивать сообщения RabbitMQ и затем асинхронно обрабатывать их? – mickadoo

ответ

0

Вы должны проверить часть о Fair dispatch в Rabbit MQ учебники.

Он показывает вам, как использовать $channel->basic_qos(null, 1, null); для обработки только одной работы за раз. Поэтому у вас есть справедливое распределение сообщений.