第8章 メッセージ配信
8.1. 承認されていない配信の処理
メッセージングシステムは、メッセージ確認を使用して、メッセージの送信ゴールが完全に行われるかどうかを追跡します。
メッセージが送信されると、メッセージが送信されてから確認応答するまでの期間が発生します (メッセージは「in flight (インフライト」) です。その間ネットワーク接続が失われた場合、メッセージ配信のステータスは不明となり、配信が完了するまでアプリケーションコードで特別な処理が必要になる場合があります。
以下のセクションでは、接続に失敗した場合にメッセージ配信の条件を説明します。
承認されていない配信とトランザクション以外のプロデューサー
メッセージが進行中の場合は、送信タイムアウトが設定されておらず、経過していないと、再接続後に再度送信されます。
ユーザーアクションは不要です。
トランザクションがコミットされていないトランザクションとのトランザクションプロデューサー
メッセージが進行中の場合は、再接続後に再度送信されます。新しいトランザクションで送信が最初に送信された場合は、再接続後に通常通りに送信が続行されます。トランザクションに以前の送信がある場合、トランザクションは失敗とみなされ、後続のコミット操作によって TransactionRolledBackException
がスローされます。
配信を図るには、失敗したトランザクションに属するメッセージを再送信する必要があります。
保留中のコミットとトランザクションプロデューサー
コミットがフライトの場合、トランザクションは失敗とみなされ、後続のコミット操作によって TransactionRolledBackException
がスローされます。
配信を図るには、失敗したトランザクションに属するメッセージを再送信する必要があります。
承認されていない配信のある非トランザクションコンシューマー
メッセージが受信してもまだ確認応答されない場合、メッセージを承認するとエラーは生成されませんが、クライアントによるアクションはありません。
受信したメッセージは確認されていないため、プロデューサーは再送信する可能性があります。重複を回避するために、ユーザーはメッセージ ID で重複メッセージを除外する必要があります。
コミットされていないトランザクションを使用したトランザクションコンシューマー
アクティブなトランザクションがまだコミットされていない場合は、失敗とみなされ、保留中の承認はドロップされます。後続のコミット操作によって TransactionRolledBackException
がスローされます。
プロデューサーは、トランザクションに属するメッセージを再送信する可能性があります。重複を回避するために、ユーザーはメッセージ ID で重複メッセージを除外する必要があります。
保留中のコミットのあるトランザクションコンシューマー
コミットがフライトの場合、トランザクションは失敗とみなされます。後続のコミット操作によって TransactionRolledBackException
がスローされます。
プロデューサーは、トランザクションに属するメッセージを再送信する可能性があります。重複を回避するために、ユーザーはメッセージ ID で重複メッセージを除外する必要があります。