2016-09-22 262 views
0

如果我發佈消息給交易所,並且消息的使用者無法處理它,我可以以設定的時間間隔重試消息。問題是消息被髮送給所有消費者,而不僅僅是發生故障的消費者。RabbitMQ重新發送消息到失敗的消費者只

你如何只重發消息失敗的消費者?

+0

當你說發送郵件給Exchange時,它是什麼類型的交換?你是否有每個消費者的一個隊列和消息發佈給他們?你能詳細詢問一下嗎? –

+0

交換是一個話題交換。每個消費者都有自己的隊列。 – ibanore

回答

0

如果消費者失敗,那麼消息將留在隊列中,您不必再次發送它。當消費者啓動並運行時,您將收到最後一條未能處理的消息。這樣我們可以一次又一次解決發送消息的問題。並且您不必發送Nack該消息,並且該消息將在消費者失敗時位於隊列中。您可以在做Ack之前通過收到消息並停止消費者來嘗試。您將能夠在隊列中再次看到該消息。

0

假設你有和交流必將更加隊列

exchange ---> queue1 ---> consumer 1 
     |---> queue2 ---> consumer 2 
     |---> queue3 ---> consumer 3 

如果一個消費者的失敗,你不需要重新發送郵件,郵件存儲到隊列中。這是排隊的範圍

+0

如果消費者2失敗,我想在5分鐘內只向消費者2重新發送消息。你會如何做到這一點? – ibanore

+0

我相信如果消費者失敗,您不必重新發送消息,不要確認消息。消費者完成處理後,只需確認消息,以便將其刪除。使用Rabbitmq,您可以在消費者一方處理此問題,而不是在發佈方一方處理。 如果消費者未能處理消息,則消息將保持隊列狀態,並且當消費者啓動時消費者會再次收到消息。 –

+0

@tibanez你不必重新發送消息。正如Mitra Ghorpade所說,使用手動確認就足夠了。如果消費者失敗,不發送確認。我想補充一點,你總是發佈到交易所,你總是消費一個或多個隊列。 – Gabriele

相關問題