2017-03-18 13 views
0

私は以下のコードを持っています。RabbitMQの接続のためのAMQP(Node.js)の接続が早すぎる

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(); 
}); 

答えて

0

これは、conn.createChannelのコールバック関数が実行される前に接続が終了するために発生します。 は、それを修正しますが、コールバック関数の内部接続を閉じる行に移動するには:

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(); // <=== close connection here 
    }); 
}); 
+0

今すぐメッセージを受け取ることができない労働者のように見えますが。 – user1187968

+0

amqp.connect( 'AMQP:// localhostを'、関数(ERR、CONN){ conn.createChannel(関数(ERR、CH){ VAR Q = 'blast_queue'; ch.assertQueue(Q、{耐久性(CTRL + Cを押すと終了します); ch.consume(q、function()); ch.prefetch(1); {0Ack:false}); }); }); {{{{0}}} – user1187968

関連する問題