Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Server Base Enterprise Option プログラム作成の手引


2.1.4 同期応答型RPC

サーバUAPの処理結果をクライアントUAPに返すRPCです。クライアントUAPでは,サーバUAPの処理結果を受信するまで処理を待ち合わせます。

同期応答型RPCを次の図に示します。

図2‒4 同期応答型RPC

[図データ]

同期応答型RPCは時間監視をします。監視時間内に応答が返らない場合はエラーリターンします。

〈この項の構成〉

(1) TP1/EEがサーバUAPの場合の同期応答型RPC

サーバUAP(TP1/EE)では,クライアントUAP(SUP,SPP)からのRPCメッセージを受信するための受信スレッドは,自ポート番号ごとに存在します。

クライアントUAPからのメッセージの受信には,ソケットAPI(TCP/IPソケットインタフェース)が使用されます。

サービスは,受信したメッセージ中のサービス名を基に,処理キューに登録されます。処理キューに登録されたサービスは,処理スレッドによって引き出され,ユーザデータをサーバUAPに引き渡します。

サーバUAPの処理終了後,ソケットAPIを使用してRPC応答メッセージをクライアントUAPに送信します。

TP1/EEが同期応答型RPCでメッセージを受信したときの処理の流れを次の図に示します。

図2‒5 同期応答型RPCでメッセージを受信したときの処理の流れ

[図データ]

(a) ノード間負荷バランス機能を使用した場合のRPCメッセージ受信

ノード間負荷バランス機能とは,他ノードにある同じサービスグループ名のサーバUAP間で,サービス処理の負荷を分散させる機能です。ノード間負荷バランス機能を使用してRPCメッセージを受信した場合,自プロセスの負荷が高いとき,または,スケジューラダイレクト機能を使用したRPCメッセージのときに,他ノードにある同じサービスグループ名のサーバUAPの中から負荷の低いプロセスを選択し,メッセージを転送します。他ノードにある同じサービスグループ名のサーバUAPの中に,負荷の低いプロセスがない場合は,自プロセスで処理します。

ノード間負荷バランス機能の詳細については,マニュアル「TP1/Server Base Enterprise Option 使用の手引」を参照してください。

(b) 他サービスグループ名を指定した場合のRPCメッセージ受信

RPCメッセージの受信時,クライアントUAPで指定したサービスグループ名とTP1/EEのサービスグループ名が一致しない場合,ネーム情報から該当するサービスグループを選択し,メッセージを転送します。

(2) TP1/EEがクライアントUAPの場合の同期応答型RPC

TP1/EEがクライアントUAP(SPP)の場合の同期応答型RPCの送信形態は,クライアントUAPからの要求を受けて即時にメッセージ送信を行う即時送信(TP1/Server Baseのdc_rpc_call関数またはdc_rpc_call_to関数と同じ形態)です。

クライアントUAPとして使用するTP1/EEが要求できるサーバUAPは,キュー受信型サーバと,ソケット受信型サーバのどちらでもかまいません。

ネームサービスを使用する場合は,RPC関連定義のrpc_destination_modeオペランドでメッセージ送信先の取得方法を指定します。また,メッセージ送信先の決定時に,通信障害によって送信先のサーバUAPを起動できなかった場合,または,送信先のサーバUAPが未起動などの旨の応答メッセージが返ってきた場合,別のあて先を取得するためにリトライ処理をします。ただし,ネームサービスからネーム情報を取得する場合は,同じサービスグループの同じあて先に対してリトライ処理をする場合もあります。

ネームサービスを使用しない場合は,サービスグループ情報関連定義のeesvgdef定義コマンドで指定したあて先にメッセージを送信します。送信時に障害が発生しても,リトライ処理はしません。

ネームサービスの詳細については,マニュアル「TP1/Server Base Enterprise Option 使用の手引」を参照してください。

(a) 即時送信

即時送信は,クライアントUAPからの要求で指定されたサーバUAPに同期応答型RPCでメッセージを送信します。クライアントUAPは,ee_rpc_call関数でメッセージを作成し,サーバUAPにメッセージを送信します。即時送信時に障害が発生した場合は,クライアントUAP(即時送信要求元)にエラーリターンします。

即時送信の流れを次の図に示します。

図2‒6 即時送信の流れ(同期応答型RPC)

[図データ]

同期応答型RPCの時間監視

ee_rpc_call関数を呼び出してから,応答が返るまでの時間は,RPC関連定義のwatch_timeオペランドに指定した監視時間で監視されています。

サーバUAPの処理に時間が掛かって,指定した監視時間を過ぎた場合は,ee_rpc_call関数はエラーリターンします。

サーバUAPが異常終了すると,ee_rpc_call関数はすぐにエラーリターンします。ただし,次に示す場合には,監視時間が過ぎてからエラーリターンする場合があります。

  • サーバUAPがあるノードのTP1/EEまたはTP1/Server Base全体が異常終了した場合

  • サービス要求のデータがサーバUAPに届く前に障害が発生した場合

  • サーバUAPの処理が終了してからクライアントUAPに結果が届く前に障害が発生した場合