Как я могу контролировать/управлять очередью в ZeroMQ?

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

  • Несколько клиентов подключаются к брокеру и отправляют идентификатор элемента, который необходимо обработать. Клиент немедленно отключается и не ждет ответа.

  • Брокер отправляет товары работникам, по одному на одного работника, для выполнения некоторой обработки. Каждое возвращение возвращает сигнал о завершении обработки.

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

  • Запросите брокера, чтобы узнать, сколько процессов на самом деле работает на рабочих, и сколько их просто ждут для запуска.

  • Попросите брокера убедиться, что работает только один процесс на один идентификатор - если появляется дубликат идентификатора и этот элемент не обрабатывается рабочим, не добавляйте его в очередь.

Я использую настройку опроса с помощью брокерских/дилерских сокетов. Код, который я использую, очень похож на этот пример от Ian Barber.

Моя первая наклонность (хотя я не уверен, как ее реализовать в zmq) заключается в том, чтобы брокер отслеживал полученные идентификаторы и те, которые активно обрабатываются рабочими. Кажется, что брокер направляет запросы непосредственно работникам, независимо от того, доступны ли они для фактического запуска обработки. Затем рабочие останавливают идентификаторы и обрабатывают их по порядку. Это не идеально, так как я ищу, чтобы иметь возможность контролировать и контролировать, что происходит в системе централизованно, для достижения надежности.

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

Ответы

Ответ 1

ZeroMQ, на мой взгляд, лучше всего используется в брокерских проектах, для которых разработана библиотека. Если вы хотите отслеживать количество элементов в очереди или пропускной способности или что-то еще, вам придется создавать это в приложении/устройстве/продюсере самостоятельно. Поскольку вы новичок в обмене сообщениями, это может быстро выйти из-под контроля. Учитывая это, я предлагаю изучить RabbitMQ (или аналогичный брокер), который предоставит вам эти услуги из коробки. Если вы примете RabbitMQ (вернее, AMQP), я бы предложил использовать обмен разветвления для сценария, описанного выше.