2.6.5 ロールバック時の読み出しメッセージの扱い(ロールバックリトライ)

トランザクションがロールバックで決着して終了したときは,読み出したメッセージをすべてキューに戻し,再度同じメッセージを読み出すトランザクションを起動します。これをロールバックリトライといいます。ロールバックリトライは,メッセージの同時引き出しをなしに指定した場合だけできます。ロールバックリトライ時の処理の流れを次の図に示します。

図2-41 ロールバックリトライ時の処理の流れ

[図データ]

説明
  1. メッセージ1を読み出します。
  2. メッセージ1のトランザクションがロールバックで決着して終了したため,メッセージ1は入力キューに差し戻されます。
  3. メッセージ1が再度読み出され,トランザクションを開始します。トランザクションがコミットで決着するまで処理が繰り返されます。ただし,処理が繰り返されるのは,ロールバックリトライ回数の上限までです。
<この項の構成>
(1) ロールバック回数のカウント
(2) ロールバックリトライの監視

(1) ロールバック回数のカウント

ロールバック回数は,入力キューごとにカウントします。優先キューと通常キューはそれぞれ別にカウントされます。

ロールバック回数のカウント対象になるのは,UAPが明示的にロールバックを指示した場合と,同期点処理の通信障害などでTP1/EEが暗黙的にロールバックした場合です。

ロールバック回数は,次の場合にクリアされ,0になります。

また,TP1/EEでは,ロールバック回数をUAPに通知します。

(2) ロールバックリトライの監視

ロールバックリトライの監視は,TP1/EEで行うか,UAPで行うか選択できます。

TP1/EEでロールバックリトライを監視する場合は,ロールバックリトライ回数の上限をサービス属性定義のservice_attr定義コマンドの-fオプションで定義します。また,ロールバックリトライ回数が上限を超えたときに,該当するサービスを閉塞するか,プロセスダウンするかをユーザサービス関連定義のscd_rollback_retry_modeオペランドで定義します。

UAPで監視する場合は,ロールバック回数が一定の回数を超えたときに,次に示すような対応をします。