我是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);
答案 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);
});
});