2.2.6 出力キューによるメッセージ管理

UAPから一方送信メッセージの送信要求があったときに,指定されたサービスごとに出力キュー(OTQ)の閉塞状態の管理ができるよう,出力キューは送信先サービスグループのサービス単位に管理されます。

なお,出力キューはメモリ上で管理されるため,サーバダウンによる再開始時は閉塞状態を引き継げません。ただし,CLサーバについては,出力キューの閉塞状態を実行系から待機系に転送することで,閉塞状態を保証(永続化)します。出力キューの閉塞状態の永続化については,「7.6.4 トランザクションと非同期に転送されるリソースの永続化」を参照してください。

<この項の構成>
(1) 出力キューの定義
(2) 出力キューの閉塞
(3) 出力キューの閉塞状態の監視と閉塞解除
(4) XTC終了処理の待ち合わせ

(1) 出力キューの定義

出力キューは,送信元となるXTCの送信先サービス関連定義のeemchsrvdef定義コマンドで定義します。送信先となるXTCのサービスグループごとに,サービスグループ名とサービス名を定義します。

(2) 出力キューの閉塞

出力キューが閉塞すると,次のような状態になります。

出力キューが閉塞する要因を次に示します。

一方送信メッセージの送信障害時の出力キューの自動閉塞を次の図に示します。

図2-10 一方送信メッセージの送信障害時の出力キューの自動閉塞

[図データ]

説明
一方送信メッセージの送信障害が発生すると,出力キューを自動閉塞します。その後,出力キューの閉塞を示すメッセージを出力して,エラートランザクションを起動します。

(3) 出力キューの閉塞状態の監視と閉塞解除

XTCは,出力キューの閉塞状態を監視します。監視時間の間隔は,高速メッセージ送信関連定義のmch_send_otqwatch_time_intervalオペランドで定義します。

また,出力キューの閉塞解除は,APIまたはコマンドによる指示があったときにだけ行います。

出力キューの閉塞監視と閉塞解除の流れを次の図に示します。

図2-11 出力キューの閉塞監視と閉塞解除の流れ

[図データ]

説明
  1. メッセージ送信障害発生時,サービスグループ下の全サービスに対応する出力キューを自動閉塞し,送信先サービスグループの状態監視を依頼します。
  2. 監視スレッドでは,送信先サービスグループに対して一定間隔で受付確認要求メッセージを送信します。
  3. 受付確認要求メッセージを受信した受信側は,一方送信メッセージを受信できるかどうか判断し,受信可能であれば,受付確認応答(受付可)メッセージを送信します。受信できない場合は,受付確認応答(受付不可)メッセージを送信します。
  4. 受付確認応答(受付可)メッセージを受信した送信側は,イベント通知トランザクション起動要求を行い,UAPに通信できることを通知します。受付確認応答(受付不可)メッセージを受信した場合は,2.に戻って処理を継続します。なお,イベント通知トランザクションは,一度起動すると,新たにサービスグループレベルの自動閉塞が発生しないかぎり起動しません。
  5. 出力キュー閉塞解除要求時,閉塞解除対象の送信先サービスグループに対し,受付確認要求メッセージを送信します。
  6. 受付確認要求メッセージを受信した受信側は,一方送信メッセージが受信できるかどうかを判断し,受付確認応答(受付可)メッセージまたは受付確認応答(受付不可)メッセージを送信します。
  7. 受付確認応答(受付可)メッセージを受信した場合は,出力キューの閉塞を解除します。出力キューの閉塞解除によって,出力キュー上の一方送信メッセージの送信を再開します。

(4) XTC終了処理の待ち合わせ

XTCの終了処理時,出力キューに未送信メッセージが残っている間は,終了処理の待ち合わせを行います。終了処理の待ち合わせを行うのは,XTCの終了形態が正常終了または計画停止Aの場合です。計画停止B,強制終了,またはプロセスダウンの場合,待ち合わせは行いません。

待ち合わせ方法は次の3とおりです。

待ち合わせ中であっても,eemchotqendコマンドを入力することでXTCを終了できます。

なお,待ち合わせ方法は高速メッセージ送信関連定義のmch_send_end_otqwatchオペランドで指定します。