[stompit STOMP 客户端]故障转移无法与 STOMP 生产者正常工作
[stompit STOMP client]Failover not working properly with STOMP producer
我正在使用 stompit STOMP client. github - https://github.com/gdaws/node-stomp。
我正在使用 ConnectFailover API 进行重新连接管理。我有以下代码:
</p>
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
API没有问题,但是setTimeout代码有问题。当客户端看到连接失败时,我应该清除超时。
我正在使用 stompit STOMP client. github - https://github.com/gdaws/node-stomp。
我正在使用 ConnectFailover API 进行重新连接管理。我有以下代码:
</p>
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
API没有问题,但是setTimeout代码有问题。当客户端看到连接失败时,我应该清除超时。