Я хочу обновить zmq с 2.2 до 4.1.4 на некоторых конкретных машинах, не прерывая поток сообщений на другие машины, на которых все еще работает 2.2.0.
Проблема, которую я заметил до сих пор, заключается в том, чточто подписчик v2 не получает никаких сообщений от издателя v4 (наоборот отлично работает).
Вот моя теория о том, почему:
В версиях 3 и выше фильтрация сообщений происходит наиздателя, в то время как в версии 2 фильтрация выполняется у подписчика (это изменение было задокументировано здесь: https://raw.githubusercontent.com/zeromq/zeromq3-x/master/NEWS в версии 3.0.0).
Пример zguide для трассировки PUB/SUB
в версии 3 показывает, что приподписчик добавляет подписку, PUB
получает уведомление о добавлении подписки, что имеет смысл, поскольку фильтрация происходит у издателя.С подписчиком v2 (который сам выполняет фильтрацию) эти сообщения не отправляются издателю, поэтому мой издатель v4 не знает, что v2 SUB
подключился, и PUB
молча отбрасывает пакеты.
Из руководства: (http://zguide.zeromq.org/page:all#toc115)
"Поток подписчика подписывается на" A "и" B ", получает пять сообщений и затем уничтожает свой сокет. Когда вы запускаете пример,слушатель печатает два сообщения подписки, пять сообщений данных, два сообщения отписки и затем молчание: «
[002] 0141 // subscribe to "A"
[002] 0142 // subscribe to "B"
[007] B-91164
[007] B-12979
[007] A-52599
[007] A-06417
[007] A-45770
[002] 0041 // unsubscribe to "A"
[002] 0042 // unsubscribe to "B"
» Это показывает, как сокет издателя прекращает отправку данных, когда для него нет подписчиков. Поток издателявсе еще отправляет сообщения. Сокет просто отбрасывает их молча "
Есть ли обходной путь для этого?
ZMQ говорит:« Все версии 4.x нацелены на совместимость со стабильнымивозвращается к версии 2.2.0 ", но это легко может означать совместимость API, а не обмен сообщениями.