Node.JS and Java PUB/SUB



我正在尝试构建一个应用程序,该应用程序将由node.js服务器完成通信。此节点服务器将接收来自其他对等方的消息。

我的node.js代码是:

var zmq = require('zmq'),
socket = zmq.socket('sub');
socket.bind('tcp://127.0.0.1:5556', function (err) {
if (err) {
console.log('Error: ', err);
throw err;
}
socket.on('message', function (envelope, blank, data) {
console.log(arguments);
});
socket.on('error', function (err) {
console.log(arguments);
});
});

在系统的另一部分,有一个java服务器应该为此服务器发送消息。 这是我java代码:

Context context = ZMQ.context(1);
Socket publisher = context.socket(ZMQ.PUB);
publisher.connect("tcp://127.0.0.1:5556");
for (int request_nbr = 0; request_nbr < 10; request_nbr++) {
publisher.send("Hello");
}

目前,我的java服务器在本地运行,我的node.js在暴露端口 5556 的 docker 内运行。
我已成功从java服务器发送消息。但是我的node.js服务器没有收到任何消息。

我的 ZeroMQ 初始化有问题吗?

是的,有一个问题:

正如 ZeroMQ 协议规范中所定义的那样,SUB正式可扩展通信模式原型在实例化时有一个空的订阅列表。

空的 SUB 端订阅是原因:

您的 SUB 端确实必须订阅其他任何内容(至少是一个""- 是的 - 一个空字符串就足够了,用于开始接收任何和所有消息,或者可以设置一些特定于问题/上下文的字符串,作为 TOPIC 过滤器,其中每条消息将开始测试是否存在至少一个这样的 TOPIC-s, 并丢弃(不.recv()-ed 或根本没有晋升到.on( 'message', ... )处理程序的手中)。

无论如何,享受用于分布式计算的ZeroMQ功能

相关内容

  • 没有找到相关文章

最新更新