amqp交换不会自动删除

我有基于amqplib 0.2.1的rabbitmq 3.3.5运行和nodejs项目

问题是,一旦交换被声明,它不会被删除连接到rabbitmq后closures。

如果我们开始这样的例子

var amqp = require('amqplib'); var when = require('when'); amqp.connect('amqp://localhost').then(function(conn) { return when(conn.createChannel().then(function(ch) { var ex = 'logs_new'; var ok = ch.assertExchange(ex, 'fanout', {durable: false, autoDelete: true}}) var message = process.argv.slice(2).join(' ') || 'info: Hello World!'; return ok.then(function() { ch.publish(ex, '', new Buffer(message)); console.log(" [x] Sent '%s'", message); return ch.close(); }); })).ensure(function() { conn.close(); }); }).then(null, console.warn); 

并运行

 #rabbitmqctl list_exchanges 

列出交易所…

 amq.rabbitmq.log topic amq.rabbitmq.trace topic amq.topic topic logs_new fanout ...done. 

虽然连接到rabbitmq被closures,但交stream(logs_new)仍然存在。

如何告诉rabbitmq这个交换需要被删除,如果它没有被任何连接使用?

编辑:如http://www.squaremobius.net/amqp.node/doc/channel_api.html所述,autoDelete选项应该是“true”。 但是即使用新名称交换也不会被删除。 什么可能是错的?

声明交换时,应该将auto_delete标志设置为True 。 当所有通道都完成后,这将自动删除交换。

请记住,这意味着只要存在对交易所的积极约束,它就会一直存在。 如果删除绑定或队列,交换将被删除。

如果您需要保留队列,但不需要交换,则可以在完成发布后删除绑定。 这应该自动删除交换。