Я видел несколько вопросов об этом, но у меня нет ответов. Я нашел удовлетворительным. Этот вопрос, в частности, относится к zeromq pattern: pub/sub with guaranteed delivery, хотя я открыт для использования любого другого механизма zeromq для достижения такого же эффекта.Как избежать отбрасывания сообщений zeromq pub sub
Мой вопрос в том, есть ли способ отправить сообщения в шаблон для фанатов, например, подписчик издателя в ZeroMQ с уверенностью, что сообщения будут доставлены? Кажется, что Дилер с нулевым копированием мог бы сделать это хорошо, но это было бы намного грязнее, чем pub-sub. Есть ли лучший вариант? Каковы же недостатки в этом, помимо необходимости писать больше кода?
Причина необходимости этого:
Я пишу код для анализа данных, поступающих от измерительных приборов. Модуль, который подключается к инструменту, должен иметь возможность передавать данные другим модулям для их анализа. Они, в свою очередь, должны передавать свои проанализированные данные в модули вывода.
На первый взгляд pub-sub с ZeroMQ казался идеальным для работы, но сообщения отбрасываются, если какой-либо абонент замедляется и попадает на знак высокой воды. В случае этой системы неприемлемо, чтобы сообщения были отброшены только на часть модулей из-за непрерывности событий. Все модули должны анализировать событие, чтобы результат был значимым. Однако, если никакие модули не получили сообщения для события, это было бы хорошо. По этой причине было бы хорошо заблокировать издателя (инструментальный модуль), если один из модулей анализа попадет в знак высокой воды.
Я полагаю, что другая альтернатива заключается в том, чтобы иметь дело с пропущенными сообщениями после факта, но это просто тратит время обработки на события, которые будут отброшены позже.
EDIT: Наверное, думая об этом дальше, я ожидаю, что сообщение отправлено = сообщение доставлено, потому что я использую inproc и общаюсь между потоками. Тем не менее, если бы я отправлял сообщения по tcp, есть вероятность, что сообщение может быть потеряно, даже если ZeroMQ не будет его специально отбрасывать. Означает ли это, что мне, вероятно, нужно иметь дело с отброшенными сообщениями, даже если я использую блокировку отправки? Существуют ли какие-либо гарантии доставки сообщений с помощью inproc?
+1 для аналогий с ACID – SteveLove