メッセージキュー:ネットワーク障害によりメッセージは失われますか?
質問
WebsphereMQ や ActiveMQ (JMS 経由で使用) などのメッセージング システムにおけるメッセージ配信の信頼性について疑問に思っています。私の知る限り、受信者が利用できない場合はメッセージをバッファリングでき、後で配信されます。
ここで、送信者が一時的にネットワークに接続できなくなったらどうなるのか疑問に思います。後でメッセージを送信する何らかのローカルバッファリングはありますか?これはメッセージブローカーが実行されている場所に依存すると思います。すべてのマシンにローカル ブローカーが存在しますか? それとも中央のブローカーのみですか?
私の質問を正確に指摘するには:一時的なネットワーク障害が発生した場合でも、メッセージが最終的に受信されることを保証する必要がある場合、メッセージング システムを選択するのは正しいでしょうか?この信頼性を実現するには特定の設定が必要ですか?
関連するドキュメントへのポインタをいただければ幸いです。
解決
一般的な解決策は、「ストアアンドフォワード」と呼ばれています。あなたがローカルメッセージエージェントにメッセージを手渡さしたらこのようなシステムでは、それは彼らの責任になります。このエージェントは、完全なブローカーではないかもしれません。メッセージングシステムは、基本的な配信保証を持っている場合、彼らは本当のブローカーに渡しているまで、ローカルエージェントは、まだメッセージの永続的なバッファリングが必要になります。
他のヒント
どうしてもメッセージを失うわけにはいかない場合は、可能であればエンドポイントに信頼できるメッセージング パターンを実装することをお勧めします。送信者は一定期間内に確認応答が受信されなかった場合に再送信し、受信者は同じメッセージを複数回受信する場合に対処するための重複検出機能を備えています。
保証された配信にはパフォーマンスのオーバーヘッドが伴い、通常、メッセージが到着するまでにかかる時間については保証されません。