2013-01-03 99 views
3

使用RabbitMQ Admin(v3),我嘗試創建一個隊列,它將發送死信消息到默認交換機,並在其上綁定錯誤隊列的路由鍵「MyErrorRoutingKey」。 因此,在管理界面中,我將「死信交換」留空。RabbitMQ,死信交換 - >無法將消息路由到默認交換機?

我只是想知道,如果它是正常的以下信息嘗試創建隊列時:

406 PRECONDITION_FAILED - 無效ARG「X-死信路由鍵」爲 隊列「myQueue中「在虛擬主機‘/’:routing_key_but_no_dlx_defined

,因爲進一步的文檔中,據說這似乎可能路線死消息到默認交換:

有可能形成死信隊列的循環。例如, 這可能會發生,當一個隊列死信消息到默認 交換沒有指定一個死信路由密鑰。在 這樣的週期(即到達相同隊列兩次的消息)的消息將被丟棄 。

那麼我該如何將消息路由到默認交換?與上述「循環無用的死信」不同,我希望能夠指定路由密鑰,以便我的消息不會丟失。

回答

2

對我來說聽起來像routing_key_but_no_dlx_defined說,如果你沒有定義死信交換,那麼你不應該定義死信路由密鑰,這也是有道理的。

我不知道你想用默認交換到底該怎麼做,但也有一個名字,所以也許你可以設置死信交換也...

關於你從文檔最後一個引號這意味着,如果你有安裝使用循環死信交換,即:

QUEUE-A > DEAD-LETTER-QUEUE > QUEUE-A

...因爲它回來排隊-A,如果它離開的RabbitMQ將丟棄該報文由於超時,死信隊列。 如果這樣的延遲重試是你想要的,你將不得不手動排隊你的消息到DEAD-LETTER-QUEUE,但是有跡象表明RabbitMQ可能會讓你有這樣的週期(http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2013-April/026489.html)。

0

老問題,但沒有人似乎已經回答,所以我會給它一個鏡頭。

我在使用網絡用戶界面時遇到了完全相同的錯誤,但我可以通過手動設置「x-dead-letter-exchange」和「x-dead-letter-routing-key」來避開它作爲自定義參數而不是使用提供的字段。

enter image description here