2011-04-09 40 views
1

如果我使用php的amqp類在交換類型設置爲direct並且唯一指定的選項是durable創建rabbitmq中的交換,那麼嘗試連接到node.js中的交換,我會得到一個Cannot redeclare exchange with different options error,如果您是選項不匹配。RabbitMQ:`rabbitmqctl list_exchanges`下的'direct'標題是什麼意思?

但是,據我所知,我使用完全相同的選項(鍵入直接和選項持久)。所以,我做了一個測試,並創造了一個PHP的交流稱爲node.js中稱爲node_exchangephp_exchange和一個跑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標題在這種情況下意味着(顯然這不是所有類型的直接交換,因爲它將node_exchange列爲直接類型)?我怎樣才能讓node.js創建一個相同的amqp交換(以便它在連接到持久交換時不會失敗)?

我使用的PECL PHP AMQP庫和節點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. 

回答

1

這不是一個標題 - 這是AMQP,一個略顯混亂方面的後果,其是有一個名爲「」的直接交換。這是所有隊列自動綁定的「默認」交換。

就PECL和node-amqp的問題而言,我沒有使用其中任何一種,但可能您的交換在類型或耐久性以外的地方有所不同。 「rabbitmqctl list_exchanges名稱類型auto_delete內部參數」將向返回的表中添加更多列以顯示交換的所有細節。或者查看管理插件。

+0

謝謝你回答我的問題。我編輯了原始文件以包含您提到的命令。管理插件會指出其他可能的差異嗎?謝謝。 – 2011-04-09 21:28:48