-1

我试图让 ZMQ 发布者和订阅者工作的基本实现,但它默默地失败了。我正在使用 JeroMQ 0.5.2(当前版本)和 Java 8。

考虑以下官方测试文件: https ://github.com/zeromq/jeromq/blob/master/src/test/java/org/zeromq/PubSubTest.java

我已将第一个测试 (testRaceConditionIssue322) 全部复制到一个新的主类中并运行它。发布者绑定到端口,并声称发送每条消息,但接收者没有收到一条消息。添加日志表明订阅者在发布者发送消息之前认为自己已被订阅。

我已经在两台计算机上尝试过这个,以及使用不同的代码,每次都是相同的最终结果。是什么赋予了?

4

1 回答 1

0

好的,我想通了。两件事以一种不幸的方式融合在一起。

  1. 我链接的测试可能是故意在发布者之前启动订阅者。出于某种原因,订阅者报告连接成功,即使发布者尚未打开端口。它没有建立连接,也没有收到随后发送的消息。当我确保发布者已绑定并监听连接,然后订阅者连接,然后发布者发布消息时,它按我的预期工作。
  2. 作为订阅者,我使用的 OTHER 代码中有一行我没有注意到 - socket.hasReceiveMore()。它期望在一条消息中包含两个字符串,但我分别发送了两个字符串。这意味着部分接收器代码从未执行过——它接收到我发送的字符串,但将它们作为部分消息丢弃。当我发送带有标志的第一个字符串publisher.send(msg, ZMQ.SNDMORE);(而第二个没有)时,它按预期工作。
于 2020-03-20T00:32:04.610 回答