メッセージをExchangeに公開し、そのメッセージのコンシューマがメッセージを処理できなかった場合、設定した間隔でメッセージを再試行できます。問題は、失敗したコンシューマだけでなく、すべてのコンシューマにメッセージが送信されることです。RabbitMQが失敗したコンシューマへのメッセージ再送信
どのようにして失敗したコンシューマにメッセージを再送信するだけですか?
メッセージをExchangeに公開し、そのメッセージのコンシューマがメッセージを処理できなかった場合、設定した間隔でメッセージを再試行できます。問題は、失敗したコンシューマだけでなく、すべてのコンシューマにメッセージが送信されることです。RabbitMQが失敗したコンシューマへのメッセージ再送信
どのようにして失敗したコンシューマにメッセージを再送信するだけですか?
コンシューマが失敗した場合、メッセージはキューに残り、再度送信する必要はありません。消費者が稼働しているときは、処理に失敗した最後のメッセージを受信します。そうすれば、メッセージを何度も何度も送信するという問題を解決できます。また、Nack
を送信しなくても、Ack
というメッセージは表示されず、コンシューマが失敗したときにメッセージがキューに入ります。 Ack
を実行する前に、メッセージを取得して消費者を止めることでそれを試すことができます。キュー内でメッセージを再び見ることができます。
はあなたが持っていると交換が複数のキュー
exchange ---> queue1 ---> consumer 1
|---> queue2 ---> consumer 2
|---> queue3 ---> consumer 3
に結合した1つのコンシューマに障害が発生した場合、あなたは再送信メッセージに必要としないと仮定し、メッセージがキューに格納されます。それがキューを持つ範囲です
消費者2が失敗した場合は、5分後に消費者2にのみメッセージを再送信します。あなたはどうしますか? – ibanore
私はあなたがメッセージを再送する必要はないと信じています。消費者が処理を完了した後は、メッセージをAckして削除されます。 Rabbitmqを使用すると、パブリッシャー側ではなく消費者側でこれを処理できます。 コンシューマがメッセージの処理に失敗した場合、コンシューマはキューに入れられ、コンシューマはそのメッセージを再び受信します。 –
@tibanezメッセージを再送信する必要はありません。 Mitra Ghorpade氏によると、手動で確認するだけで十分です。コンシューマが失敗すると、ackを送信しません。私はあなたが常に交換機に公開し、常に1つまたは複数のキューを消費することを付け加えたいと思います。 – Gabriele
Exchangeにメッセージを送信したら、それはどのタイプの交換ですか?そして消費者ごとに1つのキューがあり、それらのすべてにメッセージが公開されますか?あなたはちょっと詳細を聞くことができますか? –
交換はトピック交換です。各コンシューマには独自のキューがあります。 – ibanore