0

我将 amqplib 与 node.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仍然会路由消息吗?

4

1 回答 1

1

所有实体(如交换、队列、消息)全局存在于代理上,并且对单个 vhost 内的所有连接和通道可见。没有例外。

队列可以被定义为独占的,那么它们只存在于同一个连接中,当它关闭时它们被销毁。这是一种特殊情况,因为它们仍然可见,因此无法从其他连接访问它们。

队列和交换都有auto-delete选项,默认设置为true. 这意味着它们将在使用后被删除(有关详细信息,请参阅交换队列自动删除文档)。

于 2014-12-29T07:51:57.040 回答