第12章 複製メッセージの検出
AMQ Broker には、受信する重複メッセージをフィルターする自動複製メッセージ検出が含まれるため、独自の複製検出ロジックをコーディングする必要はありません。
重複検出がないと、クライアントはターゲットブローカーまたは接続に失敗するたびに、送信したメッセージが正常に終了したかどうかを判断できません。たとえば、ブローカーによってメッセージが受信および処理される 前 にブローカーまたは接続に失敗すると、メッセージはそのアドレスに到達することはなく、クライアントは失敗のためにブローカーから応答を受信しません。一方、ブローカーまたは接続がブローカーによって受信および処理された 後 に失敗した場合、メッセージは正しくルーティングされますが、クライアントは応答を受信しません。
さらに、トランザクションを使用して成功を判断することは、このような場合に役立ちません。たとえば、トランザクションコミットの処理中にブローカーまたは接続が失敗する場合、クライアントはメッセージを正常に送信したかどうかを判断できません。
クライアントが最後のメッセージを再送信して仮定の失敗を修正する場合、結果としてアドレスに送信された重複メッセージが表示され、システムに悪影響を及ぼす可能性があります。重複メッセージを送信すると、たとえば、発注書が 2 回満たされる可能性があることを意味します。幸い、{AMQ Broker} は、このような問題の発生を防ぐ方法として、自動複製メッセージ検出を提供します。
12.1. 重複 ID キャッシュの設定 リンクのコピーリンクがクリップボードにコピーされました!
ブローカーは、_AMQ_DUPL_ID プロパティーの受信値のキャッシュを維持します。各アドレスには個別のキャッシュがあります。キャッシュは円形で固定されます。新しいエントリーは、キャッシュ領域の要求に合わせて最も古いエントリーを置き換えます。
キャッシュのサイズを適切に設定してください。以前のメッセージが同じ _AMQ_DUPL_ID を持つ新しいメッセージを受け取る前に id-cache-size メッセージよりも多くのメッセージが到達した場合、ブローカーは重複を検出できません。これにより、両方のメッセージがブローカーによって処理されます。
手順
以下の設定例は、BROKER_INSTANCE_DIR/etc/broker.xml に要素を追加して ID キャッシュを設定する方法を示しています。