当amqp重新启动时,读取ECONNRESET

Read ECONNRESET comes up when amqp restarts

本文关键字:读取 ECONNRESET amqp 重新启动      更新时间:2023-10-05

目前我创建了一个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)

我尝试在相同的场景中对其进行多次测试,上面的错误总是在第二次时出现。为什么?有人能帮我想办法吗?

实际上,异常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));
};