用于RabbitMQ的AMQP(Node.js)过早关闭连接

时间:2017-03-18 23:26:56

标签: node.js rabbitmq amqp

我有以下代码,并且它给了我以下错误。

TypeError: Cannot read property 'assertQueue' of undefined
    at /var/www/myapp/dashboard/routes.js:195:39
    at /var/www/myapp/node_modules/amqplib/lib/callback_model.js:46:16
    at /var/www/myapp/node_modules/amqplib/lib/callback_model.js:61:10
    at /var/www/myapp/node_modules/amqplib/lib/callback_model.js:74:5

如果我注释掉conn.close(),并且代码工作正常,我认为代码试图在执行ch.assertQueue之前过早关闭conn。解决此问题的最佳方法是什么?

amqp.connect('amqp://localhost', function(err, conn) {
  conn.createChannel(function(err, ch) {
    var q = 'blast_queue';
    var msg = blast.id;

    ch.assertQueue(q, {durable: true});
    ch.sendToQueue(q, new Buffer(msg), {persistent: true});
    console.log(" [x] Sent '%s'", msg);
  });
  conn.close();
});

2 个答案:

答案 0 :(得分:1)

这是因为连接关闭在find /media/pi/88DC-E668/MP3/ -name \*.mp3 | while read f; do omxplayer "$f" done 中的回调函数执行之前发生。 要修复它,请在回调函数内移动关闭连接的行:

conn.createChannel

答案 1 :(得分:1)

这对我有用:

发件人:

amqp.connect('amqp://localhost', function(err, conn) {

收件人:

amqp.connect({ protocol: 'amqp', hostname: 'localhost', port: 5672, username: 'xxx', password: 'xxx', vhost: '/' }, function(err, conn) {