Node.JS 和 Java PUB/SUB
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
在 docker 内 运行,端口 5556 暴露。
我已成功从 java
服务器发送消息。但是我的 node.js
服务器没有收到任何消息。
我的ZeroMQ初始化有问题吗?
是的,有问题:
根据 ZeroMQ 协议规范中的定义,SUB-正式可伸缩通信模式原型在实例化时有一个空订阅列表。
空 SUB 端订阅是原因:
你的子端确实必须订阅任何其他东西(至少是 ""
- 是的 - 一个空字符串就足够了,开始接收任何和所有消息,或者可以设置一些 problem/context-specific 字符串作为 TOPIC-filter,其中每条消息将开始测试是否存在至少一个这样的 TOPIC-s,并丢弃(不是 .recv()
-ed 或根本没有提升到 .on( 'message', ... )
处理程序的手中)。
无论如何,享受 ZeroMQ 的分布式计算能力!
我正在尝试构建一个应用程序,该应用程序将由 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
在 docker 内 运行,端口 5556 暴露。
我已成功从 java
服务器发送消息。但是我的 node.js
服务器没有收到任何消息。
我的ZeroMQ初始化有问题吗?
是的,有问题:
根据 ZeroMQ 协议规范中的定义,SUB-正式可伸缩通信模式原型在实例化时有一个空订阅列表。
空 SUB 端订阅是原因:
你的子端确实必须订阅任何其他东西(至少是 ""
- 是的 - 一个空字符串就足够了,开始接收任何和所有消息,或者可以设置一些 problem/context-specific 字符串作为 TOPIC-filter,其中每条消息将开始测试是否存在至少一个这样的 TOPIC-s,并丢弃(不是 .recv()
-ed 或根本没有提升到 .on( 'message', ... )
处理程序的手中)。
无论如何,享受 ZeroMQ 的分布式计算能力!