2.1.8 リモートプロシジャコールでメッセージを送受信できない場合
リモートプロシジャコールでメッセージを送受信できない場合について,状況別に説明します。
(1) TP1/EEがサーバUAPの場合で,メッセージを受信できないとき
次の場合はメッセージ受信処理を実行できません。
-
サービス名がTP1/EEの処理キューに定義されていない場合(同期応答型RPC,非同期応答型RPCの場合)
メッセージ受信時,クライアントUAPで指定したサービス名がサーバUAP(TP1/EE)の処理キューに定義されていない場合,処理キュー登録要求はエラーリターンします。このとき,クライアントUAPにRPCエラー応答,およびサーバUAPにエラー通知を行うため,RPCエラー応答トランザクション,およびエラートランザクション(ERRTRN1)を起動します。ユーザサービス関連定義のerrtrn1オペランドの指定がない場合は,エラーメッセージを出力し,メッセージを破棄します。
RPCエラー応答トランザクションは,クライアントUAPに対してRPCエラー応答メッセージを送信します。
-
サービス名がTP1/EEの処理キューに定義されていない場合(非応答型RPCの場合)
メッセージ受信時,クライアントUAPで指定したサービス名がサーバUAP(TP1/EE)の処理キューに定義されていない場合,処理キュー登録要求はエラーリターンします。このとき,サーバUAPにエラー通知を行うため,エラートランザクション処理キューへ登録要求をして,エラートランザクション(ERRTRN1)を起動します。ユーザサービス関連定義のerrtrn1オペランドの指定がない場合は,エラーメッセージを出力し,メッセージを破棄します。
-
クライアントUAPで指定したサービスグループのネーム情報を取得できない場合(同期応答型RPC,非同期応答型RPCの場合)
メッセージ受信時,クライアントUAPで指定したサービスグループのネーム情報を取得できない場合は,エラーリターンします。このとき,クライアントUAPにRPCエラー応答,およびユーザにエラー通知を行うため,RPCエラー応答トランザクションを起動します。RPCエラー応答トランザクションは,クライアントUAPに対してRPCエラー応答メッセージを送信します。
-
クライアントUAPで指定したサービスグループのネーム情報を取得できない場合(非応答型RPCの場合)
メッセージ受信時,クライアントUAPで指定したサービスグループのネーム情報を取得できない場合は,エラーメッセージを出力し,メッセージを破棄します。
-
制御メッセージを受信した場合
クライアントUAPからソケットの一時終了やソケット終了を要求するメッセージを受信した場合,エラーメッセージを出力し,該当するコネクションを解放します。
-
不正メッセージを受信した場合
クライアントUAPから受信したメッセージのサイズが不正であったり,RPCヘッダに未サポート情報が設定されていたりした場合は,次の処理をします。
-
エラーメッセージログを出力する。
-
サイズ不正など,後続処理に影響がある障害が発生している場合は,該当コネクションを解放する。
-
RPCエラー応答が可能であれば,RPCエラー応答メッセージを送信する。
3.の処理は,非応答型RPCの場合は該当しません。
-
-
リソース不足を検知した場合
クライアントUAPからメッセージ受信時,受信バッファ不足や処理キュー不足などのリソース不足によってメッセージ受信処理を実行できない場合は,次の処理をします。
-
エラーメッセージを出力する。
-
該当コネクションを解放する。
-
RPCエラー応答が可能であれば,RPCエラー応答メッセージを送信する。
3.の処理は,非応答型RPCの場合は該当しません。
-
-
業務処理中にスレッドダウンした場合(同期応答型RPC,非同期応答型RPCの場合)
業務処理中にスレッドダウンした場合,次の処理をします。
-
モニタスレッドが回復トランザクションおよびエラートランザクション(ERRTRN3)を登録し,処理スレッドを再起動する。
-
再起動された処理スレッドは,エラートランザクション(ERRTRN3)を起動する。
RPC応答メッセージは回復トランザクションを引き出した回復スレッドが送信します。
ユーザサービス関連定義のerrtrn3オペランドの指定がない場合は,エラーメッセージを出力し,メッセージを破棄します。
-
(2) TP1/EEがクライアントUAPの場合で,メッセージを送信できないとき(非応答型RPCの場合)
送信エラーになる場合を次に示します。
-
コミット送信エラーになる場合
コミット送信でメッセージ送信処理中に障害が発生し,送信エラーになった場合は,プロセス関連定義のrpc_cmtsend_retryオペランドの指定に従い,エラートランザクション(ERRTRNS)起動,またはリトライ送信を行います。リトライ送信は,別スレッド(送信専用スレッド)で送信要求を行うため,送信順序は保証しません。また,リトライ送信がエラーになった場合は無条件でエラートランザクション(ERRTRNS)を起動します。ユーザサービス関連定義のerrtrnsオペランドの指定がない場合は,エラーメッセージを出力し,メッセージを破棄します。
-
サーバUAPの正常リターン後にTP1/EEがロールバックした場合
ee_rpc_cmtsend関数が正常に終了したあと,クライアントUAP(TP1/EE)がコミットするまでに,障害が発生し,ロールバックした場合,エラー要因に応じてエラートランザクション(ERRTRN3,ERRTRNR)を起動します。メッセージは破棄され,送信できません。