ZeroMQ 发布消息失败
ZeroMQ failing to publish messages
我试图让 ZMQ 发布者和订阅者的基本实现正常工作,但它无声无息地失败了。我正在使用 JeroMQ 0.5.2(当前版本)和 Java 8.
考虑以下官方测试文件:
https://github.com/zeromq/jeromq/blob/master/src/test/java/org/zeromq/PubSubTest.java
我已将第一个测试 (testRaceConditionIssue322) 完整复制到一个新的主 class 和 运行 中。发布者绑定到端口,并声称发送每条消息,但接收者没有收到一条消息。添加日志表示订阅者认为自己在发布者发送消息之前被订阅了。
我已经在两台计算机上用不同的代码试过了,每次的最终结果都是一样的。给出了什么?
好的,我明白了。两件事以不幸的方式融合在一起。
- 我链接的测试可能是故意的,在发布者之前启动订阅者。由于某种原因,订阅者报告连接成功,即使发布者尚未打开端口。它没有建立连接,也没有收到随后发送的消息。当我确定发布者已绑定并侦听连接,然后订阅者连接,然后发布者发布消息时,它按我预期的方式工作。
- 作为订阅者,我使用的 OTHER 代码中有一行我没有注意到 -
socket.hasReceiveMore()
。它期望在一条消息中包含两个字符串,但我分别发送了两个字符串。这意味着部分接收器代码从未执行过——它接收到我发送的字符串,但将它们作为部分消息丢弃。当我发送带有标志 publisher.send(msg, ZMQ.SNDMORE);
的第一个字符串(第二个没有)时,它按预期工作。
我试图让 ZMQ 发布者和订阅者的基本实现正常工作,但它无声无息地失败了。我正在使用 JeroMQ 0.5.2(当前版本)和 Java 8.
考虑以下官方测试文件: https://github.com/zeromq/jeromq/blob/master/src/test/java/org/zeromq/PubSubTest.java
我已将第一个测试 (testRaceConditionIssue322) 完整复制到一个新的主 class 和 运行 中。发布者绑定到端口,并声称发送每条消息,但接收者没有收到一条消息。添加日志表示订阅者认为自己在发布者发送消息之前被订阅了。
我已经在两台计算机上用不同的代码试过了,每次的最终结果都是一样的。给出了什么?
好的,我明白了。两件事以不幸的方式融合在一起。
- 我链接的测试可能是故意的,在发布者之前启动订阅者。由于某种原因,订阅者报告连接成功,即使发布者尚未打开端口。它没有建立连接,也没有收到随后发送的消息。当我确定发布者已绑定并侦听连接,然后订阅者连接,然后发布者发布消息时,它按我预期的方式工作。
- 作为订阅者,我使用的 OTHER 代码中有一行我没有注意到 -
socket.hasReceiveMore()
。它期望在一条消息中包含两个字符串,但我分别发送了两个字符串。这意味着部分接收器代码从未执行过——它接收到我发送的字符串,但将它们作为部分消息丢弃。当我发送带有标志publisher.send(msg, ZMQ.SNDMORE);
的第一个字符串(第二个没有)时,它按预期工作。