2016-09-22 30 views
0

メッセージをExchangeに公開し、そのメッセージのコンシューマがメッセージを処理できなかった場合、設定した間隔でメッセージを再試行できます。問題は、失敗したコンシューマだけでなく、すべてのコンシューマにメッセージが送信されることです。RabbitMQが失敗したコンシューマへのメッセージ再送信

どのようにして失敗したコンシューマにメッセージを再送信するだけですか?

+0

Exchangeにメッセージを送信したら、それはどのタイプの交換ですか?そして消費者ごとに1つのキューがあり、それらのすべてにメッセージが公開されますか?あなたはちょっと詳細を聞くことができますか? –

+0

交換はトピック交換です。各コンシューマには独自のキューがあります。 – ibanore

答えて

0

コンシューマが失敗した場合、メッセージはキューに残り、再度送信する必要はありません。消費者が稼働しているときは、処理に失敗した最後のメッセージを受信します。そうすれば、メッセージを何度も何度も送信するという問題を解決できます。また、Nackを送信しなくても、Ackというメッセージは表示されず、コンシューマが失敗したときにメッセージがキューに入ります。 Ackを実行する前に、メッセージを取得して消費者を止めることでそれを試すことができます。キュー内でメッセージを再び見ることができます。

0

はあなたが持っていると交換が複数のキュー

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

に結合した1つのコンシューマに障害が発生した場合、あなたは再送信メッセージに必要としないと仮定し、メッセージがキューに格納されます。それがキューを持つ範囲です

+0

消費者2が失敗した場合は、5分後に消費者2にのみメッセージを再送信します。あなたはどうしますか? – ibanore

+0

私はあなたがメッセージを再送する必要はないと信じています。消費者が処理を完了した後は、メッセージをAckして削除されます。 Rabbitmqを使用すると、パブリッシャー側ではなく消費者側でこれを処理できます。 コンシューマがメッセージの処理に失敗した場合、コンシューマはキューに入れられ、コンシューマはそのメッセージを再び受信します。 –

+0

@tibanezメッセージを再送信する必要はありません。 Mitra Ghorpade氏によると、手動で確認するだけで十分です。コンシューマが失敗すると、ackを送信しません。私はあなたが常に交換機に公開し、常に1つまたは複数のキューを消費することを付け加えたいと思います。 – Gabriele

関連する問題