是否有一种通用模式用于使 0mq pub/sub 中的发布者在节点中冗余?其动机是能够与可能会失败/定期重新启动的发布者一起运行多个进程。
我最初的想法是在主服务器中创建一个转发器并从工作发布者连接到它:
var cluster = require('cluster')
, zmq = require('zmq')
, endpointIn = 'ipc:///tmp/cluster_pub_sub'
, endpointOut = 'tcp://127.0.0.1:7777';
if (cluster.isMaster) {
for (var i = 0; i < 2; i++) cluster.fork();
startPubSubForwarder();
} else {
startPublisher();
}
function startPublisher() {
var socket = zmq.socket('pub');
socket.connect(endpointIn);
setInterval(function () {
socket.send('pid=' + process.pid);
}, 1000);
}
function startPubSubForwarder() {
var sIn = zmq.socket('sub')
, sOut = zmq.socket('pub');
// incoming
sIn.subscribe('');
sIn.bind(endpointIn, function (err) {
if (err) throw err;
});
sIn.on('message', function (data) {
sOut.send(data);
});
// outgoing
sOut.bind(endpointOut, function (err) {
if (err) throw err;
});
}
还有其他/更好的方法吗?