2.3.11 窓口となるTP1/Serverの切り替え機能
窓口となるTP1/Serverで障害が発生すると,エラーリターン後,窓口となるTP1/Serverの定義を変更する必要があります。しかし,複数の窓口となるTP1/Serverを指定しておくと,TP1/Clientは,指定された次のTP1/Serverに切り替えを試みます。
ホスト切り替えは,通信が成功するまで繰り返し行います。一巡し,指定されたすべてのホストとの接続に失敗した場合,関数はエラーリターンします。
ホスト切り替えに成功し関数が正常終了したあと,再度ホスト切り替えが発生した場合,前回障害となったホストも切り替えるホストの対象となります。
ホスト切り替えが発生すると,dc_clt_cltout_s関数を実行するまで,そのホストが通信先ホストとなります。
ただし,CUPから一斉にサービスを要求した場合,一つの窓口となるTP1/Serverのネームサービスに問い合わせが集中してしまうので,負荷が集中してしまうことになります。複数の窓口となるTP1/Serverをランダムに選択すれば,窓口となるTP1/Serverの負荷を分散できます。詳細については,「2.3.12 窓口となるTP1/Serverの負荷分散」を参照してください。
(1) 切り替えのタイミング
-
ユーザ認証時にTP1/Serverのネームサービスとの接続に失敗した場合,時間内に応答が返ってこなかった場合,またはエラー応答を受信した場合。
-
RPC発行時に窓口となるTP1/Serverのネームサービスとの接続に失敗した場合,時間内に応答が返ってこなかった場合,またはエラー応答を受信した場合。
-
ネームサービスを使用しないRPC発行時に窓口となるTP1/Serverのスケジュールサービスとの通信が失敗した場合。
-
トランザクションの開始要求時に窓口となるTP1/Serverのネームサービスとの接続に失敗した場合,時間内に応答が返ってこなかった場合,またはエラー応答を受信した場合。
-
常設コネクション確立要求時に窓口となるTP1/Serverのネームサービスとの接続に失敗した場合,時間内に応答が返ってこなかった場合,またはエラー応答を受信した場合。
-
サービス要求時,スケジュールサービス開始処理中,およびスケジュールサービス終了処理中に,窓口となるTP1/Serverからエラー応答を受信した場合。
(2) 切り替え先OpenTP1の指定方法
-
dc_clt_cltin_s関数の引数target_host,またはクライアント環境定義DCHOSTに,複数の窓口となるTP1/Serverを指定します。クライアント環境定義DCHOSTの指定は,dc_clt_cltin_s関数の引数target_hostにNULLを指定した場合に有効となります。
-
サービス要求時,スケジュールサービス開始処理中,およびスケジュールサービス終了処理中に,窓口となるTP1/Serverからエラー応答を受信した場合,上記の指定に加え,クライアント環境定義DCHOSTCHANGEにYを指定します。
(3) 切り替えの順序
初回選択時(dc_clt_cltin_s関数実行時)は,先頭に指定されたホストを選択します。障害発生時は,障害となったホストの次に指定されたホストを選択します。
- 〈例〉次の指定の場合
DCHOST=hostA,hostB,hostC DCHOSTSELECT=N
-
dc_clt_cltin_s関数発行
先頭に指定されたhostAを選択
hostAとの接続に成功
-
dc_rpc_call_s関数発行
hostAとの接続障害発生
障害となったhostAの次に指定されたhostBを選択
hostBとの接続障害発生
障害となったhostBの次に指定されたhostCを選択
hostCとの接続に成功
-
dc_rpc_call_s関数発行
hostCとの接続障害発生
障害となったhostCの次に指定されたhostAを選択
hostAとの接続障害発生
障害となったhostAの次に指定されたhostBを選択
hostBとの接続障害発生
選択対象ホストがなくなり関数はエラーリターン
-
dc_rpc_call_s関数発行
hostBとの接続に成功
-
dc_clt_cltout_s関数発行
-
dc_clt_cltin_s関数発行
先頭に指定されたhostAを選択
-