2.1.4 同期応答型RPC
サーバUAPの処理結果をクライアントUAPに返すRPCです。クライアントUAPでは,サーバUAPの処理結果を受信するまで処理を待ち合わせます。
同期応答型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でメッセージを受信したときの処理の流れを次の図に示します。
(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(即時送信要求元)にエラーリターンします。
即時送信の流れを次の図に示します。
- 同期応答型RPCの時間監視
-
ee_rpc_call関数を呼び出してから,応答が返るまでの時間は,RPC関連定義のwatch_timeオペランドに指定した監視時間で監視されています。
サーバUAPの処理に時間が掛かって,指定した監視時間を過ぎた場合は,ee_rpc_call関数はエラーリターンします。
サーバUAPが異常終了すると,ee_rpc_call関数はすぐにエラーリターンします。ただし,次に示す場合には,監視時間が過ぎてからエラーリターンする場合があります。
-
サーバUAPがあるノードのTP1/EEまたはTP1/Server Base全体が異常終了した場合
-
サービス要求のデータがサーバUAPに届く前に障害が発生した場合
-
サーバUAPの処理が終了してからクライアントUAPに結果が届く前に障害が発生した場合
-