我正在使用带有javascript的rabbitMQ。 RabbitMQ提供的所有示例都是使用大约500ms的setTimeout关闭连接。当我尝试用任何延迟来收集连接时,那些东西都没有锻炼。
var amqp = require('amqplib/callback_api');
amqp.connect('amqp://localhost', function(err, conn) {
conn.createChannel(function(err, ch) {
var ex = 'logs';
var msg = process.argv.slice(2).join(' ') || 'Hello World!';
ch.assertExchange(ex, 'fanout', {durable: false});
ch.publish(ex, '', new Buffer(msg));
console.log(" [x] Sent %s", msg);
});
setTimeout(function(){conn.close(); process.exit(0)},500);
});
答案 0 :(得分:0)
您可以通过在支持的任何位置使用回调函数来减少对setTimeout
的需求,包括您正在进行的assertExchange
来电:
var amqp = require('amqplib/callback_api');
amqp.connect('amqp://localhost', function(err, conn) {
conn.createChannel(function(err, ch) {
var ex = 'logs';
var msg = process.argv.slice(2).join(' ') || 'Hello World!';
ch.assertExchange(ex, 'fanout', {durable: false}, function(){
ch.publish(ex, '', new Buffer(msg));
console.log(" [x] Sent %s", msg);
conn.close();
process.exit(0);
});
});
});
您放置process.exit()
电话非常重要。
通过将其置于最后一个回调中,您更有可能不需要设置超时。但是,the publish
method of amqplib不支持回调。如果发布消息有延迟,立即退出仍可能导致消息无法发送。