RabbitMQ:`rabbitmqctl list_exchanges`下的'direct'标题是什么意思?

如果我使用php的amqp类创buildexchangem交换types设置为direct和唯一的选项指定是durable ,然后尝试连接到node.js交换,我得到一个Cannot redeclare exchange with different options error你看到如果你的select不匹配。

但是,据我所知,我正在使用完全相同的选项(键入直接和选项持久)。 所以我做了一个testing,并在php中创build了一个名为php_exchange交换和一个名为node_exchange node.js,并运行rabbitmqctl list_exchanges并获得了一些有趣的输出:

 Listing exchanges ... node_exchange direct amq.headers headers amq.direct direct amq.match headers amq.fanout fanout direct php_exchange direct amq.topic topic ...done. 

direct标题在这种情况下意味着什么(显然它不是直接types的所有交换,因为它将node_exchange列为直接types)? 我怎样才能得到node.js创build一个相同的amqp交换(以便它不会失败时,连接到一个持久的交stream)?

我正在使用PECL php amqp库和node-amqp库(https://github.com/ry/node-amqp)

谢谢。

编辑:

以下是rabbitmqctl list_exchanges name type auto_delete internal arguments的输出(为简洁起见,删除了其他交换):

 Listing exchanges ... node_exchange direct false false [] php_exchange direct false false [] ...done. 

这不是一个标题 – 这是AMQP稍有混淆的一个结果,就是有一个叫做“”的直接交换。 这是所有队列自动绑定的“默认”交换。

就PECL与node-amqp的问题而言,我并不使用其中的任何一种,但可能您的交换在types或耐久性之外有所不同。 “rabbitmqctl list_exchanges名称typesauto_delete内部参数”将在返回的表中添加更多列以显示交换的所有细节。 或者看pipe理插件。