是否有一种常见模式用于使0mq pub/sub中的发布者在节点中冗余?动机是能够与可能会失败/定期重新启动的发布者一起运行多个进程。如何在Node.js中创建一个ZeroMQ发布者冗余?
我最初的想法是在主创建一个转发器,并从工人出版商连接到它:
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;
});
}
这样做的还有其他/更好的方法?
(我的问题肯定是关于你的第二个例子)。我担心“货运代理商/分销商”箱子正在倒塌。我怎样才能有两个或更多的这些“转发/分销”流程? HAProxy(或任何其他TCP代理)是唯一的方法吗?或者0mq中有什么可以执行负载平衡/故障转移? –
您不希望每个消息类型使用多个分发服务器。您的一位经销商将从1个发件人发送邮件到N个收件人。 您应该只能使用0mq作为您的分销商的运输工具。您必须编写一些自定义代码来订阅一条消息并发送给N个侦听器,以及任何错误队列类型方案。 – MateodelNorte
还有一件需要注意的事情: 由于您的邮件是持久性的,如果分销商发生故障,它会在邮件被保存在队列中时从其停止的地方开始发送。 – MateodelNorte