Как я могу контролировать/управлять очередью в ZeroMQ?
Прежде всего, я новичок в системах очереди сообщений ZeroMQ и сообщений, поэтому то, что я пытаюсь сделать, может быть решено с помощью другого подхода. Я разрабатываю систему обмена сообщениями, которая делает следующее:
-
Несколько клиентов подключаются к брокеру и отправляют идентификатор элемента, который необходимо обработать. Клиент немедленно отключается и не ждет ответа.
-
Брокер отправляет товары работникам, по одному на одного работника, для выполнения некоторой обработки. Каждое возвращение возвращает сигнал о завершении обработки.
У меня есть рудиментарная настройка системы, которая правильно обрабатывает запросы/ответы, но я также хотел бы сделать следующее:
-
Запросите брокера, чтобы узнать, сколько процессов на самом деле работает на рабочих, и сколько их просто ждут для запуска.
-
Попросите брокера убедиться, что работает только один процесс на один идентификатор - если появляется дубликат идентификатора и этот элемент не обрабатывается рабочим, не добавляйте его в очередь.
Я использую настройку опроса с помощью брокерских/дилерских сокетов. Код, который я использую, очень похож на этот пример от Ian Barber.
Моя первая наклонность (хотя я не уверен, как ее реализовать в zmq) заключается в том, чтобы брокер отслеживал полученные идентификаторы и те, которые активно обрабатываются рабочими. Кажется, что брокер направляет запросы непосредственно работникам, независимо от того, доступны ли они для фактического запуска обработки. Затем рабочие останавливают идентификаторы и обрабатывают их по порядку. Это не идеально, так как я ищу, чтобы иметь возможность контролировать и контролировать, что происходит в системе централизованно, для достижения надежности.
В любом случае, любые подсказки, советы или примеры такого типа установок будут оценены.
Ответы
Ответ 1
ZeroMQ, на мой взгляд, лучше всего используется в брокерских проектах, для которых разработана библиотека. Если вы хотите отслеживать количество элементов в очереди или пропускной способности или что-то еще, вам придется создавать это в приложении/устройстве/продюсере самостоятельно. Поскольку вы новичок в обмене сообщениями, это может быстро выйти из-под контроля. Учитывая это, я предлагаю изучить RabbitMQ (или аналогичный брокер), который предоставит вам эти услуги из коробки. Если вы примете RabbitMQ (вернее, AMQP), я бы предложил использовать обмен разветвления для сценария, описанного выше.
Ответ 2
Библиотека Python для ZeroMQ, похоже, имеет шаблон для работы с этим: http://zeromq.github.com/pyzmq/devices.html#monitoredqueue