Я использую stompit Клиент STOMP. github - https://github.com/gdaws/node-stomp.[stompit STOMP client] Отказоустойчивость не работает должным образом с производителем STOMP
Я использую API ConnectFailover для управления повторным подключением. У меня есть ниже код:
var stompit = require('stompit')
var reconnectOptions = {
'maxReconnects': 100,
'randomize' : false
};
var connManager = new stompit.ConnectFailover("failover:(stomp://mqbroker.nyc:61613,stomp://failovermqbroker.nyc:61613)", reconnectOptions);
connManager.on('error', function(error) {
var connectArgs = error.connectArgs;
var address = connectArgs.host + ':' + connectArgs.port;
console.error('Could not connect to ' + address + ' : ' + error.message);
});
connManager.on('connecting', function(connector) {
var address = connector.serverProperties.remoteAddress.transportPath;
console.log('Connecting to ' + address);
});
var totalMsgs = 50;
var count = 0;
var delayMs = 10000;
connManager.connect(function(error, client, reconnect) {
if (error) {
console.log("terminal error, given up reconnecting: " + error);
return;
}
client.on('error', function(error) {
// destroy the current client
client.destroy(error);
// calling reconnect is optional and you may not want to reconnect if the
// same error will be repeated.
reconnect();
});
var sendParams = {
'destination' : '/queue/myqueue',
'persistent' : 'true'
}
function sendMsg(){
setTimeout(function() {
console.log ('sending message ' + (count));
client.send(sendParams).end('Hello number ' + (count));
if (count++ < totalMsgs) {
sendMsg(count);
}
else {
client.send(sendParams).end('DISCONNECT');
client.disconnect();
console.log("Done.");
}
}, delayMs);
}
sendMsg();
});
Проблема заключается в том, что когда клиент отключается от брокера сообщений, продюсер продолжает выполнение кода sendMsg, и это приводит к потере 2-3 сообщений между ними. Я хочу, чтобы клиент прекратил выполнение в отключенном состоянии и возобновил работу, когда он подключен к экземпляру отказоустойчивости.
Я использую API неправильно? Каким будет правильный способ достичь этого?
Некоторое время взломали его, но в этом API не хватает документации о том, как использовать функции. Цените всю помощь.
Спасибо, xabhi