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;
});
}
これを行う他の/より良い方法はありますか?