我想在某些特定的机器上将zmq从2.2升级到4.1.4,而不会中断到仍在运行2.2.0的其他机器的消息流 .

到目前为止我注意到的一个问题是v2订阅者没有收到来自v4发布者的任何消息(其他方式正常工作) .

以下是我的理论原因:
在版本3及更高版本中,消息过滤发生在发布者,而版本2过滤发生在订阅者处(此更改记录在此处:_368338_在v 3.0.0下) .

v3中 PUB/SUB 跟踪的zguide示例显示,当订阅者添加订阅时,会通知 PUB 已添加订阅,这是有道理的,因为过滤发生在发布者处 . 使用v2订户(自己进行过滤),这些消息不知道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"

“这清楚地显示了发布者套接字在没有订阅者时停止发送数据的方式 . 发布者线程仍在发送消息 . 套接字只是默默地删除它们”

Is there a workaround for this?

ZMQ表示“所有4.x版本都旨在将稳定版本与2.2.0兼容”,但这很容易引用API的兼容性,而不是消息传递 .