我想在某些特定的机器上将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的兼容性,而不是消息传递 .