目前我创建了一个Sender
类客户端,它可以向amqp发送消息,还可以重新连接到amqp。当需要将消息发送到amqp时,如果连接失败,Sender可以尝试重新连接到amqp三次。以下是代码https://gist.github.com/richzw/e39237aa1fe31c15a587
然后我用以下代码测试它,
var Sender = require('./sender.js');
var amqpAddress = 'amqp://localhost';
var sender = new Sender( amqpAddress, 2000, 3, sendMessageCallback );
function sendMessageCallback( ) {
console.error('Message can NOT be sent due to MessageBus error');
}
// send message every 5 seconds
var CronJob = require('cron').CronJob;
var send_message_job = new CronJob({
cronTime: '*/5 * * * * *',
onTick: function(){
sender.deliverMessage( key, msg );
},
start: true,
});
send_message_job.start();
然后我尝试停止并随机启动amqp服务。我发现当我第一次重启amqp服务时,发件人可以继续正常发送消息。但是,当我尝试在第二次停止服务时,会出现以下错误,程序崩溃。
Error: read ECONNRESET at errnoException (net.js:905:11) at TCP.onread (net.js:559:19)
我尝试使用相同的方案多次测试,上面的错误总是出现在第二次。为什么?任何人都可以帮我弄清楚如何处理它吗?
答案 0 :(得分:0)
实际上,可以在ECONNRESET
事件中捕获异常error
。
Sender.prototype.handleDisconnections_ = function() {
return this.con_.on('error', (function( that ) {
return function( err ) {
//if ( err.code === 'ECONNRESET' ) {
//return when.reject( err );
//}
return that;//.retryConnect_( that.attempts_, that.retryDelay_ , err );
};
})(this));
};