2015-02-12 26 views
0

目前我創建一個Sender類客戶端,它可以發送消息到amqp,也重新連接到amqp。當消息需要發送到amqp時,如果連接失敗,發件人可以嘗試重新連接到amqp三次。下面是代碼https://gist.github.com/richzw/e39237aa1fe31c15a587閱讀ECONNRESET啓動時,amqp重新啓動

然後我用下面的代碼進行測試,

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

事實上,例外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)); 
};