第8章 メッセージ配信

8.1. 承認されていない配信の処理

メッセージングシステムは、メッセージ確認を使用して、メッセージの送信ゴールが頻繁に行われるかどうかを追跡します。

メッセージが送信されると、メッセージが送信されてから、確認応答するまでの期間が発生します (メッセージは「in flight (進行中)」です)。その間ネットワーク接続が失われた場合、メッセージ配信のステータスは不明となり、配信が完了するまで、アプリケーションコードで特別な処理が必要になる場合があります。

以下のセクションでは、接続に失敗した場合にメッセージ配信の条件を示します。

未承認の配信とトランザクション以外のプロデューサー

メッセージが進行中の場合、送信タイムアウトが設定されておらず、経過していないとすると、再接続後に再度送信されます。

ユーザーのアクションは不要です。

トランザクションがコミットされていないトランザクションとのトランザクションプロデューサー

メッセージが進行中の場合は、再接続後に再度送信されます。新しいトランザクションで送信が最初に送信された場合は、再接続後に通常通りに送信が続行されます。トランザクションに 1 つ前の送信がある場合は、トランザクションが失敗したと見なされ、後続のコミット操作によって TransactionRolledBackException がスローされます。

配信を図るには、失敗したトランザクションに属するメッセージを再送信する必要があります。

保留中のコミットとトランザクションプロデューサー

コミットが フライト である場合、トランザクションは失敗とみなされ、後続のコミット操作によって TransactionRolledBackException がスローされます。

配信を図るには、失敗したトランザクションに属するメッセージを再送信する必要があります。

未承認配信のあるトランザクションでないコンシューマー

メッセージが受信してもまだ確認されていないと、メッセージを承認すると、エラーは生成されませんが、クライアントによるアクションはありません。

受信したメッセージが確認されていないため、プロデューサーは再送することがあります。重複を回避するために、ユーザーはメッセージ ID で重複メッセージをフィルタリングする必要があります。

コミットされていないトランザクションを使用したトランザクションコンシューマー

アクティブなトランザクションがまだコミットされていない場合は、失敗とみなされ、保留中の承認はドロップされます。後続のコミット操作によって TransactionRolledBackException がスローされます。

プロデューサーは、トランザクションに属するメッセージを再送信する可能性があります。重複を回避するために、ユーザーはメッセージ ID で重複メッセージをフィルタリングする必要があります。

保留中のコミットのあるトランザクションコンシューマー

コミットがフライトの場合、トランザクションは失敗とみなされます。後続のコミット操作によって TransactionRolledBackException がスローされます。

プロデューサーは、トランザクションに属するメッセージを再送信する可能性があります。重複を回避するために、ユーザーはメッセージ ID で重複メッセージをフィルタリングする必要があります。