gpt4 book ai didi

node.js - amqp 交换不会自动删除

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:37 26 4
gpt4 key购买 nike

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

问题是,一旦交换被断言,在与rabbitmq的连接关闭后它就不会被删除。

如果我们开始这样的例子

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的连接已关闭,但交换(logs_new)仍然存在。

如何告诉rabbitmq如果没有任何连接使用exchange需要删除?

编辑:正如 http://www.squaremobius.net/amqp.node/doc/channel_api.html 中所述autoDelete 选项应该为“true”。但尽管如此,即使与新名称的交换也不会被删除。可能出了什么问题?

最佳答案

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

请记住,这意味着只要与交换存在活跃绑定(bind),它就会一直存在。如果删除绑定(bind)或队列,交换器也会被删除。

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

关于node.js - amqp 交换不会自动删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25801651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com