еще один надежный способ синхронизации PULL-PUSH в ZeroMQ

Если вы используете PUSH-сокеты, вы обнаружите, что первый PULL-сокет для подключения захватит несправедливую долю сообщений. Точное чередование сообщений происходит только тогда, когда все PULL-сокеты успешно подключены, что может занять несколько миллисекунд. В качестве альтернативы PUSH / PULL для более низких скоростей передачи данных рассмотрите возможность использования ROUTER / DEALER и схемы распределения нагрузки.

Поэтому одним из способов синхронизации в PUSH / PULL является использование схемы распределения нагрузки.

Для этого конкретного случая ниже, мне интересно, есть ли другой способ сделать синхронизацию:

Параллельный конвейер

Я мог бы установить конечную точку PULL в работнике для блокировки до успешной установки соединения, а затем отправить специальное сообщение через конечную точку PULL работника на «приемник». После того, как «раковина» получает специальные сообщения # работника, «раковина» отправляет сообщение с REQ-REP на «Вентилятор», чтобы уведомить, что все рабочие готовы. «Вентилятор» начинает распределять рабочие места среди рабочих.
Это надежно?

Картина из Вот

0

Решение

Да, пока Sink знает сколько Workers ждать, прежде чем сказать Ventilator что все в порядке, чтобы начать отправлять сообщения. Есть вопрос о том, есть ли специальные сообщения от Workers пройти, если они начнут до Sink подключается — но вы могли бы решить это, если бы они продолжали посылать свое специальное сообщение, пока они не начнут получать данные из Ventilator, Если вы сделаете это, то Sink будет, конечно, просто игнорировать любые дубликаты, которые он получает.

Конечно, это не совсем то же самое, что Workers живое, рабочее соединение с Ventilator, но это само по себе может посылать специальные ничего не делать, что Workers Получать. Когда они получают один из тех, кто может начать отправлять специальное сообщение Sink,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]