2012-10-31 117 views
0

不用擔心:您可以讓您的客戶重新連接到羣集,並且 重新創建隊列,對吧?只有當隊列本來不是 標記持久。如果重新創建的隊列被標記爲「持久」,那麼 將從另一個節點重新聲明它們會給您帶來難看的404 NOT_FOUND錯誤。 這可確保將故障節點恢復到羣集時,該故障節點上該隊列中的消息不會消失。 將特定隊列名稱返回到羣集的唯一方法是 實際上還原失敗的節點。但是,如果消費者嘗試使用 重新創建的隊列不耐用,則重新聲明將會成功,並且您準備重新綁定它們並繼續進行卡車運輸。RabbitMQ in Action:羣集中的隊列

在作者說,持久隊列不能重新聲明爲使數據不丟失,如何理解這個?

回答

1

問題在於RabbitMQ在哪裏保留髮布的消息。如果您在節點A中聲明隊列,則隊列消息將存在於該節點中。複製的是隊列元數據,即隊列屬性,但不包含消息。因此,如果節點A死亡,那麼在該節點中,您擁有發佈到該隊列的消息。

所以我們假設你現在去節點B並重申聲明那個隊列,它也是持久的,就像它在節點A中一樣。如果允許那個過程,那麼你將失去所有來自節點B的消息,因爲代理會認爲隊列居住在節點B中。

+0

謝謝!我會爲此做一些測試 – ligaoren