我正在使用amqplib在我的node.js服务器中传输消息。我看到了来自RabbitMQ官方网站的一个例子:
var amqp = require('amqplib/callback_api');
amqp.connect('amqp://localhost', function(err, conn) {
conn.createChannel(function(err, ch) {
var q = 'hello';
var msg = 'Hello World!';
ch.assertQueue(q, {durable: false});
// Note: on Node 6 Buffer.from(msg) should be used
ch.sendToQueue(q, new Buffer(msg));
console.log(" [x] Sent %s", msg);
});
setTimeout(function() { conn.close(); process.exit(0) }, 500);
});
在这种情况下,连接是在超时函数中关闭的。我认为这不是一个可持续的方法。然而,
ch.sendToQueue
没有回调函数,允许我在消息发送后关闭连接。什么时候关闭连接比较好呢?
sendToQueue
函数在将消息发送到RabbitMQ之前会在内部排队,而conn.close()
仅在该内部队列已排空(即所有消息都已发送到服务器并被接收)时才释放连接。编辑:我可能是错的,请阅读此文档:http://www.squaremobius.net/amqp.node/channel_api.html#overview - robertklep