Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 解説


3.3.8 メッセージキュー

〈この項の構成〉

(1) 入力キューと出力キュー

OpenTP1は,送受信するメッセージをキューに蓄えます。相手システムから受信した入力メッセージを管理する待ち行列を入力キュー(ITQ)といいます。また,相手システムへ送信する出力メッセージを管理する待ち行列を出力キュー(OTQ)といいます。

入力キューや出力キューの割り当て先として,ディスクキューメモリキューを選択できます。

割り当て先としてディスクキューを使用する場合,入力キューおよび出力キューに蓄えられたメッセージは,オンラインシステムが異常終了した場合などの再開始時に,引き継ぐことができます。また,メッセージの再送を使用する場合は,出力キューにディスクキューを割り当てる必要があります。

一方,メモリキューを使用する場合,再開始時にメッセージを引き継ぐことはできませんが,ディスクへの入出力が発生しないため,ディスクキューと比較して処理性能が向上します。再開始時に情報を引き継ぐ必要のないメッセージは,応答時間の短いメモリキューの使用をお勧めします。

OpenTP1は,ディスクキューとして,メッセージキューファイルを使用します。ディスクキューを使用する指定をした場合には,メッセージキューファイルを作成してください。メッセージキューファイルについては,「4.3.1 メッセージキューファイル」を参照してください。

入力キュー用にディスクキューを使用するのか,またはメモリキューを使用するのかは,アプリケーションごとにアプリケーション属性定義(mcfaalcap)のquekindオペランドで指定します。

出力キュー用にディスクキューを使用するのか,またはメモリキューを使用するのかは,論理端末ごとに論理端末定義(mcftalcle)のquekindオペランドで指定します。

ただし,出力キューにディスクキューを使用する指定をしていても,次のメッセージの場合はメモリキューを使用します。

入力キューまたは出力キューにディスクキューを使用したメッセージ送受信を次の図に示します。

図3‒35 入力キューまたは出力キューにディスクキューを使用したメッセージ送受信

[図データ]

(2) OpenTP1再開始時のメッセージの扱い

OpenTP1の再開始時にメッセージを引き継ぐかどうかは,メッセージの種類によって異なります。

OpenTP1の再開始時のメッセージの扱いを次の表に示します。なお,メッセージが格納されているキューの割り当て先がメモリキューの場合,表の内容に関係なくOpenTP1の再開始時にメッセージを破棄します。

表3‒6 OpenTP1の再開始時のメッセージの扱い

キュー種別

メッセージの種類

OpenTP1再開始時のメッセージの扱い

入力キュー

一方送信メッセージ

問い合わせメッセージ

通信プロトコル対応製品によって,動作が異なります。表3-7表3-8を参照してください。

MCFイベント

ERREVT1

通信プロトコル対応製品によって,動作が異なります。表3-7表3-8を参照してください。※1

ERREVT2

ERREVT3

ERREVT4

ERREVTA

エラーイベントが発生したメッセージの種類によって,動作が異なります。

OpenTP1の再開始時に引き継がれるメッセージの場合,エラーイベントを引き継ぎます。OpenTP1の再開始時に破棄されるメッセージの場合,エラーイベントを破棄します。※1

SERREVT

SCMPEVT

破棄します。

通信イベント(SERREVT,SCMPEVTを除く)

通信プロトコル対応製品によって,動作が異なります。表3-7表3-8を参照してください。

UAPからの関数発行によるアプリケーション起動メッセージ※2

<非応答型のアプリケーションを起動する場合>

引き継ぎます。

<応答型,継続問い合わせ応答型のアプリケーションを起動する場合>

起動元のメッセージの種類によって,動作が異なります。

OpenTP1の再開始時に引き継がれるメッセージの場合,アプリケーション起動メッセージを引き継ぎます。OpenTP1の再開始時に破棄されるメッセージの場合,アプリケーション起動メッセージを破棄します。

運用コマンド(mcfuevt)によるアプリケーション起動メッセージ

引き継ぎます。

ユーザタイマ監視機能によるアプリケーション起動メッセージ

破棄します。

出力キュー

一方送信メッセージ

引き継ぎます。

応答メッセージ

通信プロトコル対応製品によって,動作が異なります。表3-7表3-8を参照してください。

同期型のメッセージ

破棄します。

注※1

エラーイベントの場合,OpenTP1の再開始時にメッセージを引き継ぐかどうかを選択できます。詳細については,マニュアル「OpenTP1 システム定義」のUAP共通定義(mcfmuap)を参照してください。

注※2

アプリケーション起動メッセージを再開始時に引き継ぐ場合,入力キューだけでなくアプリケーション起動用論理端末が使用する出力キューにも,ディスクキューを割り当ててください。アプリケーション起動用論理端末が使用する出力キューにメモリキューを割り当てた場合,再開始時にメッセージが引き継がれないことがあります。

また,指定した時間が経過したあとに起動する(タイマ起動)アプリケーションを再開始時に引き継ぐ場合,さらにアプリケーション起動環境定義(mcftpsvr)のreruntmオペランドでyesを指定します。再開始時のタイマ起動の扱いについては,マニュアル「OpenTP1 プログラム作成の手引」を参照してください。

表3‒7 通信プロトコル対応製品とOpenTP1再開始時のメッセージの扱い1

メッセージの種類

通信プロトコル対応製品

TP1/NET/OSAS-NIF

TP1/NET/OSI-TP

TP1/NET/SLU - TypeP2

TP1/NET/TCP/IP

一方送信メッセージ

×

問い合わせメッセージ

×

応答メッセージ

×

ERREVT1

×

通信イベント(SERREVT,SCMPEVTを除く)

×

×

×

(凡例)

○:OpenTP1の再開始時に引き継がれます。

×:OpenTP1の再開始時に破棄されます。

−:該当する通信プロトコル対応製品では使用できないメッセージです。

表3‒8 通信プロトコル対応製品とOpenTP1再開始時のメッセージの扱い2

メッセージの種類

通信プロトコル対応製品

TP1/NET/User Agent

TP1/NET/UDP

TP1/NET/XMAP3

一方送信メッセージ

問い合わせメッセージ

×

×

応答メッセージ

×

×

ERREVT1

×

通信イベント(SERREVT,SCMPEVTを除く)

×

×

(凡例)

○:OpenTP1の再開始時に引き継がれます。

×:OpenTP1の再開始時に破棄されます。

△:問い合わせ型(request)または受信型(receive)の論理端末の場合,OpenTP1の再開始時に引き継がれます。応答型(reply)の論理端末の場合,OpenTP1の再開始時に破棄されます。

−:該当する通信プロトコル対応製品では使用できないメッセージです。

(3) メモリキューでの縮退運転

ディスクキューを使用する場合には,OpenTP1の開始時に何らかの理由でディスクキューが使えないとき,メモリキューを代わりに使って開始できます。これをメモリキューでの縮退運転といいます。メモリキューで縮退運転するかどうかを,入力キューと出力キューそれぞれの拡張予約定義で指定します。メモリキューで縮退運転しない場合は,ディスクキューに格納されるメッセージが廃棄されます。このとき,メッセージ廃棄通知イベント(ERREVT2)に対応するMCFイベント処理用MHPがあれば,起動されます。

メモリキューで縮退運転する場合は,メッセージ(KFCA11065-WまたはKFCA11066-W)が出力されます。

メモリキューで縮退してOpenTP1を開始させる場合,メモリキューはオンライン停止後の全面回復時にメッセージを回復できない点に注意してください。

オンライン中にディスクキューが使用できなくなったときは,メモリキューで縮退運転できません。

縮退運転の原因と復旧方法については,マニュアル「OpenTP1 運用と操作」を参照してください。

(4) ディスクキューのメッセージを保持

ディスクキューを使用した場合には,読み出されたあとの再読み出しに備えて,メッセージを残しておけます。再読み出しに備えて残しておくメッセージを,保持メッセージといいます。保持メッセージ数は,メッセージキューサービス定義で指定します。

メモリキューを使用した場合には,メッセージを残しておけません。

ディスクキューごとに,取り出し待ちメッセージの数と保持メッセージの数が,ユーザが定義した一定の割合を超えたとき,ディスクキューの使用率を警告するメッセージを出力できます。警告メッセージを出力するディスクキューの使用率(使用容量警告率 %で表示)は,メッセージキューサービス定義で指定します。

(5) ディスクキュー満杯時の処理

ディスク入力キューに空きがなくなった場合は,到着したメッセージを廃棄します。メッセージ廃棄通知イベント(ERREVT2)に対応するMCFイベント処理用MHPがあれば,これを起動します。ディスク出力キューに空きがなくなった場合は,メッセージを送信する関数がエラーリターンします。

(6) 入力キューと出力キューの保留

入力キューおよび出力キューへの書き込みや読み込みは,それぞれmcfthldiqコマンド,mcfthldoqコマンドで一時的に停止できます。これを保留といいます 。

保留の目的は次のとおりです。

保留には入力キューまたは出力キューへの書き込みの保留(入力保留)と入力キューまたは出力キューからの読み込みの保留(スケジュール保留)があります。

保留状態は,入力キューはmcftrlsiqコマンド,出力キューはmcftrlsoqコマンドで解除できます。また,MCFマネジャ定義の状態引き継ぎ定義(mcfmsts)やMCF通信構成定義の状態引き継ぎ定義(mcftsts)を指定すれば,OpenTP1が異常終了した場合などの再開始時にも引き継ぐことができます。

保留中にOpenTP1を終了した場合,OpenTP1を強制停止します。OpenTP1を終了する前に必ず保留を解除してください。

入力保留とスケジュール保留を次の図に示します。

図3‒36 入力保留とスケジュール保留

[図データ]

保留中に受信または送信したメッセージに対する処理を次の表に示します。

表3‒9 保留中に受信または送信したメッセージに対する処理

キュー種別

保留種別

受信または送信したメッセージに対する処理

保留したあとに受信または送信したメッセージ

保留する前にキューに格納されていたメッセージ

入力キュー

入力保留

入力保留が解除されるまでMCF通信プロセスまたはアプリケーション起動プロセスの動作を停止します。

該当するMHPを正常に起動します。

スケジュール保留

入力キューにメッセージを格納し,スケジュール保留が解除されるまでMHPがメッセージを取り出しません。

スケジュール保留が解除されるまでMHPがメッセージを取り出しません。

入力保留とスケジュール保留

入力保留が解除されるまでMCF通信プロセスまたはアプリケーション起動プロセスの動作を停止します。

スケジュール保留が解除されるまでMHPがメッセージを取り出しません。

出力キュー※1

入力保留

入力保留が解除されるまでUAPの動作を停止します。※2

MCF通信プロセスが正常にメッセージを処理します。

スケジュール保留

出力キューにメッセージを格納し,スケジュール保留が解除されるまでMCF通信プロセスがメッセージを取り出しません。

スケジュール保留が解除されるまでMCF通信プロセスがメッセージを取り出しません。

入力保留とスケジュール保留

入力保留が解除されるまでUAPの動作を停止します。※2

スケジュール保留が解除されるまでMCF通信プロセスがメッセージを取り出しません。

注※1

同期型メッセージの場合,出力キューへの書き込みや読み込みを保留できません。保留状態に関わらず出力キューにメッセージを格納し,MCF通信プロセスが正常にメッセージを処理します。

注※2

出力キューの入力保留の場合,UAPの動作を停止するタイミングを同期点処理で待ち合わせるか関数発行時に待ち合わせるかを選択できます。詳細については,マニュアル「OpenTP1 システム定義」のUAP共通定義(mcfmuap)を参照してください。

注意事項
  • 入力キューを保留して,オンライン中にユーザサーバを入れ替える場合,スケジュール保留だけを行ってください。入力保留を行った場合,MCF通信プロセスまたはアプリケーション起動プロセスの動作が停止することで,他のユーザサーバでのメッセージ送受信ができなくなることがあります。

  • 保留状態を再開始時に引き継ぐ指定をした場合,次のことをするときは,mcfthldiqコマンドやmcfthldoqコマンドに-rオプションを指定することを推奨します。

    入力キューまたは出力キューの内容の複写

    滞留しているメッセージの削除

    オンライン中のユーザサーバの入れ替え