2.1.7 通信先を指定したリモートプロシジャコール
ee_rpc_call関数またはee_rpc_cmtsend関数を使ってサービスを要求する場合,要求するサービスがどこにあるかは,OpenTP1のネームサービスで管理しているので,クライアントUAPで意識する必要はありません。しかし,サービス要求先ノードはネームサービスまたは定義によって管理するため,サービス要求先となるノードが複数存在した場合,サービス要求先となるノードを限定できません。
これに対し,ee_rpc_call_to関数またはee_rpc_cmtsend_to関数を使えば,特定のサービス要求先にサービスを要求できます。
サービス要求先を特定するには,ee_rpc_call_to関数またはee_rpc_cmtsend_to関数の引数に,ノード識別子,ホスト名,ホスト名とポート番号のどれかを指定します。
ノード識別子を指定して,サービス要求先を特定したee_rpc_call_to関数を使った通信の例を次の図に示します。
(1) サービス要求先の特定方法
サービス要求先を特定するには,ee_rpc_call_to関数またはee_rpc_cmtsend_to関数の引数に次のどれかを指定します。
(a) ホスト名
/etc/hostsファイル,またはDNSなどでIPアドレスとマッピングできるホスト名を指定して,サービス要求先ノードを特定します。指定したホストにサービスグループまたはサービスが存在しない場合,RPC要求はエラーとなります。
- ネームサーバを指定したRPCの場合
-
-
ポート番号には,サービス要求元(ee_rpc_call_to関数を呼び出した側)のname_portオペランドに指定した値が使用されます。サービス要求先のTP1/Server Baseのシステム共通定義のname_portオペランドに指定した値と,サービス要求元のname_portオペランドに指定した値が同じであることが前提です。
-
サービス要求先のホストは指定したネームサーバのホストだけであり,対象のネームサーバが管理するほかのホストは,サービス要求先になりません。
-
RPC関連定義のrpc_destination_modeオペランドの指定値に関係なく,ネーム検索によって送信先を決定します。
-
ノード識別子を指定した場合,ノード識別子の指定は無効とします。
-
- スケジュールサービスのポート(scd_port),またはTP1/EEシステムの受信用ポートを指定したRPCの場合
-
-
ポート番号には,サービス要求元(ee_rpc_call_to関数を呼び出した側)のサービスグループ情報関連定義のmysvgdef定義コマンドで指定したTP1/EEシステムの受信用ポート番号が使用されます。サービス要求先のポート番号と,サービス要求元のサービスグループ情報関連定義のmysvgdef定義コマンドで指定したTP1/EEシステムの受信用ポート番号が同じであることが前提です。
-
キュー受信型のRPCで送信します。ソケット受信型のTP1/Server Baseのユーザサーバに対してこの機能によるRPC要求はできません。指定したホストに対するRPC要求がエラーとなった場合,RPC関連定義のrpc_retryオペランドの指定値を無視し,RPC要求のリトライは行いません。
-
ノード識別子を指定した場合,エラーリターンします。
-
(b) ノード識別子
TP1/Server Baseのシステム共通定義のnode_idオペランドに指定されているノード識別子を指定して,サービス要求先ノードを特定します。
指定したノード識別子に対応するサービス要求先のOpenTP1ノードのホスト名がグローバルドメイン※内にあることが前提です。
該当のRPC要求では,RPC関連定義のrpc_destination_modeオペランドの指定値に関係なく,ネーム検索によって送信先を決定します。サービスグループ情報関連定義のeesvgdef定義コマンドに指定した送信先は対象外とします。また,ホスト名とポート番号を指定した場合,ノード識別子の指定は無効とします。
サービス要求先がTP1/EEの場合も,ノード識別子にはサービス要求先のTP1/Server Baseのノード識別子を指定します。
- 注※
-
ここでのグローバルドメインとは,次のノード名の集合を指します。
- システム共通定義のname_domain_file_useオペランドにNを指定している場合
-
システム共通定義のall_nodeオペランド,all_node_exオペランドで指定したノード名の集合です。
- システム共通定義のname_domain_file_useオペランドにYを指定している場合
-
ドメイン定義ファイルに指定したノード名の集合です。なお,ドメイン定義ファイルの格納場所は次のとおりです。
-
all_nodeのドメイン定義ファイル
$DCCONFPATH/dcnamndディレクトリ下
-
all_node_exのドメイン定義ファイル
$DCCONFPATH/dcnamndexディレクトリ下
-
(c) ホスト名とポート番号
/etc/hostsファイル,またはDNSなどでIPアドレスとマッピングできるホスト名,およびポート番号を指定することでサービス要求先ノードを特定します。
- ネームサーバを指定したRPCの場合
-
-
ポート番号には,サービス要求先のTP1/Server Baseのシステム共通定義のname_portオペランドに指定したネームサービスのポート番号を指定します。
-
サービス要求先のホストは指定したネームサーバのホストだけであり,対象のネームサーバが管理するほかのホストは,サービス要求先になりません。
-
RPC関連定義のrpc_destination_modeオペランドの指定値に関係なく,ネーム検索によって送信先を決定します。
-
ノード識別子を指定した場合,ノード識別子の指定は無効とします。
-
- スケジュールサービスのポート(scd_port),またはTP1/EEシステムの受信用ポートを指定したRPCの場合
-
-
ポート番号には,サービス要求先がTP1/Server Baseの場合は,サービス要求先のOpenTP1システムのスケジュールサービス定義のscd_portオペランドで指定したポート番号を指定します。サービス要求先がTP1/EEの場合は,サービス要求先のサービスグループ情報関連定義のmysvgdef定義コマンドで指定したTP1/EEシステムの受信用ポート番号を指定します。
-
キュー受信型のRPCで送信します。ソケット受信型のTP1/Server Baseのユーザサーバに対してこの機能によるRPC要求はできません。指定したホストに対するRPC要求がエラーとなった場合,RPC関連定義のrpc_retryオペランドの指定値を無視し,RPC要求のリトライは行いません。
-
ノード識別子を指定した場合,エラーリターンします。
-
(2) 送信先の決定とリトライ処理
ネームサーバ,またはノード識別子を指定したRPCでは,ネームサービスから送信先を取得して送信します。送信失敗時はリトライ処理を行います。ただし,送信先はノード識別子の一致するノードまたはネームサーバのノードであり,1ノードに限定されます。このため,リトライ中にネーム情報に変化がない場合は,同一のノードに対して再送します。
スケジュールサービスのポート(scd_port),またはTP1/EEシステムの受信用ポートを指定したRPCでは,関数の引数に指定された送信先に対して送信します。送信失敗時はリトライ処理を行いません。
(3) 関数の指定値の関係
ee_rpc_call_to関数またはee_rpc_cmtsend_to関数の指定値の関係を次の表に示します。
項番 |
関数の指定値 |
指定の推奨 |
処理内容 |
|||
---|---|---|---|---|---|---|
ホスト名 |
ノード識別子 |
ポート番号 |
サービス要求先※ |
|||
1 |
− |
− |
− |
EENOFLAGS |
△ |
ee_rpc_call関数またはee_rpc_cmtsend関数と同じです。 |
2 |
− |
− |
− |
EERPC_NAMPORT |
× |
関数がエラーリターンします。 |
3 |
− |
− |
− |
EERPC_SCDPORT |
× |
|
4 |
− |
− |
○ |
EENOFLAGS |
× |
|
5 |
− |
− |
○ |
EERPC_NAMPORT |
× |
|
6 |
− |
− |
○ |
EERPC_SCDPORT |
× |
|
7 |
○ |
− |
− |
EENOFLAGS |
◎ |
ネームサーバを指定したRPCになります。 サービス要求先のポート番号には,サービス要求元のシステム共通定義のname_portオペランドの指定値を仮定します。 |
8 |
○ |
− |
− |
EERPC_NAMPORT |
× |
関数がエラーリターンします。 |
9 |
○ |
− |
− |
EERPC_SCDPORT |
◎ |
スケジュールサービスのポート,またはTP1/EEシステムの受信用ポートを指定したRPCになります。 サービス要求先のポート番号には,サービス要求元の自サービスグループ情報関連定義のmysvgdef定義コマンドで指定した受信ポート番号を仮定します。 |
10 |
○ |
− |
○ |
EENOFLAGS |
× |
関数がエラーリターンします。 |
11 |
○ |
− |
○ |
EERPC_NAMPORT |
◎ |
ネームサーバを指定したRPCになります。 |
12 |
○ |
− |
○ |
EERPC_SCDPORT |
◎ |
スケジュールサービスのポート,またはTP1/EEシステムの受信用ポートを指定したRPCになります。 |
13 |
− |
○ |
− |
EENOFLAGS |
◎ |
ノード識別子を指定したRPCになります。 |
14 |
− |
○ |
− |
EERPC_NAMPORT |
× |
関数がエラーリターンします。 |
15 |
− |
○ |
− |
EERPC_SCDPORT |
× |
|
16 |
− |
○ |
○ |
EENOFLAGS |
× |
|
17 |
− |
○ |
○ |
EERPC_NAMPORT |
× |
関数がエラーリターンします。 ポート番号の指定は無視します(項番14と同じ)。 |
18 |
− |
○ |
○ |
EERPC_SCDPORT |
× |
関数がエラーリターンします。 |
19 |
○ |
○ |
− |
EENOFLAGS |
△ |
ネームサーバを指定したRPCになります。 ノード識別子の指定は無視します(項番7と同じ)。 |
20 |
○ |
○ |
− |
EERPC_NAMPORT |
× |
関数がエラーリターンします。 |
21 |
○ |
○ |
− |
EERPC_SCDPORT |
△ |
スケジュールサービスのポート,またはTP1/EEシステムの受信用ポートを指定したRPCになります。 ノード識別子の指定は無視します(項番9と同じ)。 |
22 |
○ |
○ |
○ |
EENOFLAGS |
× |
関数がエラーリターンします。 |
23 |
○ |
○ |
○ |
EERPC_NAMPORT |
△ |
ネームサーバを指定したRPCになります。 ノード識別子の指定は無視します(項番11と同じ)。 |
24 |
○ |
○ |
○ |
EERPC_SCDPORT |
△ |
スケジュールサービスのポート,またはTP1/EEシステムの受信用ポートを指定したRPCになります。 ノード識別子の指定は無視します(項番12と同じ)。 |