我正在使用带有node的amqplib.js并且我试图确保我理解channels
的概念。
这是来自 amqplib 文档: Channels are multiplexed over connections, and represent something like a session, in that most operations (and thereby most errors) are scoped to channels.
以下是一些基本代码,我将在其中打开一个 amqp 连接,创建一个通道、一个交换和一个队列:
var amqp = require('amqp/callback_api');
var connection = amqp.createConnection({ host: "localhost", port: 5672 });
connection.on('ready', function () {
connection.createChannel(function(err, ch) {
ch.assertExchange('1', 'fanout', function(err, ok) {});
ch.assertQueue('a', {
exclusive: true,
durable: true
}, function(err, ok) {
});
});
在上面的代码中,exchange '1'
和queue 'a'
是否只存在于为其定义的通道上?我的意思是,如果我要发布一条消息以交换a
从另一个渠道交换a
是否仍然路由消息?
所有实体(如交换、队列、消息)都全局存在于代理上,并且对单个虚拟主机中的所有连接和通道可见。没有例外。
队列可以定义为独占的,然后它们只存在于同一个连接中,当它关闭时,它们会被销毁。这是特殊情况,因为它们仍然可见,因此无法从其他连接访问它们。
队列和交换都有auto-delete
选项,默认情况下设置为 true
。这意味着它们将在使用后被删除(有关详细信息,请参阅 Exchange 和队列自动删除文档)。