是否有一種常見模式用於使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