«Invalidate» RabbitMQ queue или отправка «DONE сигнала» - PullRequest
1 голос
/ 28 ноября 2011

Я использую RabbitMQ с Python / pika для распространения некоторых пакетных заданий.Поэтому я думаю, что у меня очень распространенный сценарий: один процесс заполняет очередь заданиями, которые необходимо выполнить.Несколько рабочих извлекают задания, преобразуют данные и помещают результаты во вторую очередь.Еще один процесс извлекает результаты и объединяет их.Работает пока очень хорошо.Но как мне остановить мои сценарии контролируемым образом?Существуют ли какие-либо встроенные функции для «аннулирования» очереди, чтобы работники знали, что больше заданий не будет заполнено?

1 Ответ

0 голосов
/ 28 ноября 2011

Нет, невозможно найти, сколько издателей все еще публикуют в очереди в AMQP. Вам придется свернуть свою собственную систему.

Один из способов сделать это - обмен fanout, к которому каждый работник привязывает очередь (давайте назовем это «контрольным» обменом), и издатель должен отправить ему специальное сообщение по окончании. Затем работники могут проверить свою «контрольную» очередь, чтобы увидеть, есть ли там еще издатель; если это не так и больше нет доступных сообщений, они могут безопасно отключиться и завершить работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...