2017-02-14 46 views
0

我們正在處理兩個RabbitMQ節點的集羣,我們正在使用RabbitMQ Java驅動程序與節點交互。我們正在使用「標題」交換,它根據標頭綁定和持久隊列將消息傳輸到隊列。在RabbitMQ的多節點上定義隊列

問題是,隊列是爲一個節點定義的。如果此節點由於某種原因而崩潰,則應該到達此節點隊列中的消息將丟失。

有沒有辦法告訴RabbitMQ當它檢測到持有它們的另一個節點不可達時更改隊列主節點,因此確保消息傳輸到隊列?並在節點再次出現時恢復消息?

現在,我們使用高可用隊列來解決這個問題,但性能非常糟糕。我們不需要它提供的鏡像功能,因爲我們只需要在節點再次出現時恢復消息就可以了。

回答

1

您需要使messages persistentbu設置delivery_mode爲2並聲明隊列持久。這樣,當節點重新啓動並保存消息時,隊列就回來了。更多在the second tutorial。其實我沒有在教程中看到如何在java中使用它,但是它是there in phyton,所以你需要在javadoc中查找,也可能是'publish'方法中的一個參數。

+0

是的,我們已經試過了。它在節點再次出現時恢復在節點崩潰之前傳遞的消息。但是,當節點關閉時,將此節點作爲主節點隊列,仍然會忽略新消息,直到節點再次出現。 – Kraiss