2.3.4 連鎖RPC
SPPの実行プロセスは,マルチサーバ(同じSPPを複数のプロセスで同時に起動する機能)の場合,サービスが要求されるたびに起動されます。CUPから同じサービスグループを2回以上呼び出したとき,そのサービスグループのSPPが以前と同じプロセスで実行されるとは限りません。ただし,同期応答型RPCで,かつ同じサービスグループに属するサービスを2回以上要求する場合に限り,そのサービスを以前と同じプロセスで実行させることができます。これを連鎖RPCといいます。
連鎖RPCは,CUPからトランザクションを起動している場合,または常設コネクションを確立している場合に使用できます。
連鎖RPCを使用すると,一つのトランザクション処理に必要なユーザプロセスの数が少なくなり,トランザクション処理に掛かる負荷を軽減できます。トランザクションとして連鎖RPCを使用する場合は,一つのグローバルトランザクションで動作します。
連鎖RPCは,CUPのプロセス単位に保証されます。ただし,同じグローバルトランザクション内でも,クライアントUAPが異なれば,複数回呼び出されたサービスが同じプロセスで起動されることは保証されません。
- 〈この項の構成〉
(1) 連鎖RPCの開始
連鎖RPCとなるサービス要求をする場合は,サービスを要求するdc_rpc_call_s関数のflagsにDCRPC_CHAINEDを指定してください。この値を指定してサービスを要求すると,SPPは連鎖RPCであることを認識して,プロセスを確保します。2回目以降のサービス要求のflagsにもDCRPC_CHAINEDを指定します。
(2) 連鎖RPCの終了
連鎖RPCは,次のどちらかの方法で終了します。
-
連鎖RPCを実行しているサービスグループに対して,flagsにDCNOFLAGSを指定したdc_rpc_call_s関数を実行する。
-
連鎖RPCを実行しているグローバルトランザクションを同期点処理(コミット,またはロールバック)で完了させる。