2017-05-19 27 views
1

我對Node js和RabbitMq頗爲陌生。我想創建10萬個隊列。但創建大約6ooo隊列後,我收到以下錯誤。無法連接到使用節點js的RabbitMq中的超過6k隊列

error: "Cannot read property 'createChannel' of undefined"

如果我有錯誤,我想再次調用conn.createConnection()方法。這個怎麼做?

下面的代碼

var amqp = require("amqplib/callback_api"); 
var time = 0; 
var limit = 100000 
var timer = setInterval(() => { 
    time+=1; 
    if(time>=limit){ 
    clearInterval(timer); 
    } 
    var now = Date.now() 
    //RabbitMQ 
    amqp.connect("amqp://localhost",function(err,conn){ 
    conn.createChannel(function(err,ch){ 
     if(err){ 
     //try to do conn.createChannel again 
     } 
     var q = "queue_name"+time.toString(); 
     // console.log(q); 
     var msg = "this is the message string!!!"; 
     ch.assertQueue(q,{durable: false}); 
     ch.sendToQueue(q,new Buffer(msg),{persistent: false}); 
     // console.log("time = "+time); 
    }); 
    }); 
    //RabbitMQ` 
},10); 
+0

通過讀取給定的錯誤消息,我將假設「amqp.connect」並注入一個空值到參數「conn將」當在「conn」上調用某種空/空值的「createChannel」時會導致給定的錯誤。 檢查「err」裏面的內容,我假設連接到「amqp :: // localhost」的連接沒有成功建立,因此沒有「conn」對象可以被傳遞。 –

回答

0

你在做什麼,不僅創造100K隊列,也100K連接和渠道。很可能您的文件句柄已用完,您可以調整ulimit以允許更多。但是,您可能不想創建所有這些連接和通道。

使用具有一個發佈者通道與這些方針一個連接嘗試:

var amqp = require("amqplib/callback_api"); 
var time = 0; 
var limit = 100000 

amqp.connect("amqp://localhost", function(err, conn) { 
    if (err) { 
     console.log('Somethings wrong with connection:', err); 
     return; 
    } 
    conn.createChannel(function(err, ch){ 
     if (err) { 
      console.log('Somethings wrong with channel:', err); 
      return; 
     } 

     var timer = setInterval(() => { 
      time+=1; 
      if(time>=limit) { 
       clearInterval(timer); 
      } 
      var now = Date.now() 
      var q = "queue_name"+time.toString(); 
      var msg = "this is the message string!!!"; 
      ch.assertQueue(q, {durable: false}); 
      ch.sendToQueue(q, new Buffer(msg),{persistent: false}); 
      console.log('sent', time); 
     },10); 
    }); 
});