无法使用节点js连接RabbitMq中超过6k的队列

时间:2017-05-19 06:04:19

标签: node.js rabbitmq

我是Node js和RabbitMq的新手。我想创建100k队列。但是在创建大约6ooo队列后,我收到以下错误。

  

错误:“无法读取未定义的属性'createChannel'”

如果我有错误,我想再次调用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);

1 个答案:

答案 0 :(得分: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);
    });
});