2016-07-11 180 views
2

我正在嘗試同步我擁有的三個微服務。RabbitMQ - 最佳做法

爲了做到這一點,我實現了RabbitMQ。 這似乎是目前的工作,但我不知道如果我遵循最佳實踐,我無法找到一個參考來查找它,也許有人可以幫助我呢?

簡要的什麼,我試圖做的: 我有一個服務誰應該更新了兩個人, 的每一項服務應接收發送的消息。 我有兩種類型的消息(保存和刪除資源)。 *發生故障時,隊列應恢復並重新發送消息。

我目前在做什麼: 我已經建立了一個交流,我的每一個消費者連接到兩個不同的隊列,每個類型的消息(保存/刪除)。 我已經使用了直接交換爲了稍後過濾消息,即使目前我不需要過濾它們。

每個隊列都被命名,並且交換以及消息都是持久的,並且我正在消費我消費的消息。

問題 我應該設定不同的隊列,每個類型的事件,或者我應該發在同一個隊列中的消息,並將其篩選? 上述是否使用RabbitMQ是解決問題的正確方案。 最佳做法是什麼?

回答

1

您的設置是正確的。

在兔子裏設計隊列時的一個常見規則是,一個類型的消費者隊列(這裏指的是不同的處理邏輯)。所以,因爲你有兩種類型的消費者。他們對不同類型的事件(保存/刪除)有不同的邏輯,每個隊列的一個隊列是完全正確的。

如果您希望只有一種類型的使用者可以處理保存和刪除事件,那麼使用一個隊列也是可以的。

但是兩種類型的消費者和一個共享隊列將不起作用。當多個消費者訂閱一個隊列時,由於事件以循環方式發送給消費者,因此您的任一消費者只能接收一半的事件。

+0

謝謝你的回答! 我遇到了一個新問題,如果我未能消費一條消息,而我也沒有確認。該過程不會再嘗試並消耗該消息。 它永遠不會進入隊列中的就緒狀態,但它仍然在隊列中。 有關如何解決它的任何建議? – straiker2

+0

你應該嘗試捕捉你的消費邏輯,如果有任何異常,並且你肯定下次嘗試可能成功,你可以發送一個nack來將消息返回給隊列,查看這個鏈接:http://stackoverflow.com/questions/28794123/ACK-或-NACK合的RabbitMQ;如果您確定重試仍會失敗(基於發現的異常),則仍應發送確認,並記錄異常以進一步分析。 –