Hitachi

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


2.1.5 非同期応答型RPC

サーバUAPの処理結果をクライアントUAPに返すRPCです。クライアントUAPでは,サーバUAPの処理結果を待たないで処理を続行し,サーバUAPの処理結果を非同期で受信します。

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

図2‒7 非同期応答型RPC

[図データ]

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

〈この項の構成〉

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

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

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

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

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

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

図2‒8 非同期応答型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(即時送信要求元)にエラーリターンします。

クライアントUAPがee_rpc_poll_any_replies関数を発行することによって,RPC応答メッセージを受信します。

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

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

[図データ]

非同期応答型RPCの時間監視

非同期応答型RPCの場合,ee_rpc_poll_any_replies関数で時間監視します。RPC関連定義のwatch_timeオペランドに指定した監視時間,またはee_rpc_set_watch_time関数で指定した監視時間は無視されます。

(3) エラーが発生した非同期応答型RPC要求の記述子の取得

エラーが発生した非同期応答型RPC要求に対応する記述子は,ee_rpc_get_error_descriptor関数で取得します。非同期応答の記述子を取得できるのは,サーバUAP側でエラーが発生した場合だけです。ee_rpc_get_error_descriptor関数の呼び出し側でエラーが発生した場合は,非同期応答の記述子を取得できません。