2016-02-29 3 views
0

Я использую 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

ответ

0

Там нет никаких проблем с API, но с SetTimeout кодом. Я должен очистить тайм-аут, когда клиент видит сбой подключения.