Hitachi

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


2.4.3 DBキューを使用したシステム間通信

DBキューを使用したシステム間通信の概要について説明します。

〈この項の構成〉

(1) DBキューを使用したシステム

DBキューは,DBキューからメッセージを読み出すシステムと関連づけられています。DBキューとシステムとの関連を次の図に示します。

図2‒31 DBキューとシステムとの関連

[図データ]

システムは,次のDBキューを使用してシステム間通信をします。

この図の場合,自システムは,読み出しをするDBキューとしてDBキュー1を使用します。書き込みをするDBキューとしてDBキュー2およびDBキュー3を使用します。

システムは,複数のDBキューと連携できます。複数のDBキューは,DBキューグループとしてまとめることができます。DBキューに関する定義は,DBキュー機能関連定義で指定します。

(2) メッセージの読み出しと書き込み

DBキューからメッセージを読み出す処理,およびDBキューにメッセージを書き込む処理の流れを説明します。

(a) メッセージの読み出し

メッセージの読み出しは,AP間通信をする場合とユーザキューアクセスをする場合で処理が異なります。

DBキュー機能を使用してAP間通信をする場合

DBキューに書き込まれたメッセージは,イベント受信を契機にメッセージを読み出すトランザクションに読み出されます。メッセージを読み出すトランザクションは,DBキュー機能関連定義で指定されたサービスにメッセージの処理を要求します。メッセージを読み出すトランザクションは,メッセージの処理を実行するサービスごとに起動します。

メッセージの読み出し処理の流れについて,次の図に示します。

図2‒32 メッセージの読み出し処理の流れ

[図データ]

複数のシステムがDBキューにメッセージを書き込むため,自システムは複数のシステムからのイベントを受信しますが,イベント送信元(メッセージの書き込み元)を意識しないでメッセージの読み出しをします。

DBキュー機能を使用してユーザキューアクセスをする場合

メッセージ読み出しトランザクションで,メッセージの読み出し処理をするUAPを起動し,UAP内でee_dbq_msgget関数【CBLEEDBQ('MSGGET ')】を呼び出して,DBキューに書き込まれたメッセージを読み込みます。

(b) メッセージの書き込み

メッセージを書き込むトランザクションで,ee_dbq_msgput関数を呼び出します。トランザクションのコミット時にDBキューにメッセージを書き込みます。メッセージ書き込みが完了すると,メッセージを書き込んだDBキューと連携しているシステムにイベントを送信します。イベントは,DBキューごとに送信します。

メッセージの書き込み処理の流れについて,次の図に示します。

図2‒33 メッセージの書き込み処理の流れ

[図データ]

(3) TCP/IPを使用したシステム間通信

DBキューを使用したシステム間通信では,TCP/IPまたはRPCのどちらかの通信形態を,サービスグループ情報関連定義のeesvgdef定義コマンド,mysvgdef定義コマンド,またはDBキュー機能関連定義のdbqgrpdef定義コマンドの-tオプションで指定できます。ただし,TP1/EE 01-02以降と通信する場合は,性能やリソースなどの点で,TCP/IP通信を指定することをお勧めします。また,次に示す場合は,使用できる通信形態が決められています。

なお,RPCを使用したシステム間通信をする場合は,ネームサービスを使用できません。

ここでは,TCP/IPを使用したシステム間通信について説明します。

(a) TCP/IP通信でのイベントの送受信

■ TP1/EEがサーバUAPの場合のTCP/IP通信

TP1/EEがサーバUAPの場合のTCP/IP通信では,クライアントUAP(J2EEシステムまたはTP1/EE 01-02以降)からイベントを受信するため,サービスグループ情報関連定義のmysvgdef定義コマンドの-tオプションにDBQを指定した,DBキュー受信スレッド情報を設定します。

受信したイベントは,処理キューに登録されます。処理キューに登録されたイベントは,処理スレッドによって引き出されます。

TCP/IP通信でイベントを受信したときの処理の流れを次の図に示します。

図2‒34 TCP/IP通信でイベントを受信したときの処理の流れ

[図データ]

■ TP1/EEがクライアントUAPの場合のTCP/IP通信

TP1/EEがクライアントUAPの場合のTCP/IP通信で,サーバUAP(J2EEシステムまたはTP1/EE 01-02以降)に対してイベントを送信したときの処理の流れを次の図に示します。

図2‒35 TCP/IP通信でイベントを送信したときの処理の流れ

[図データ]

イベントを送信するには,TP1/EEサービス定義でイベントの送信先を指定しておくか,またはDBキュー表でイベントの送信先を管理する必要があります。

• TP1/EEサービス定義でイベントの送信先を指定しておく方法

この方法には,サービスグループ情報関連定義またはDBキュー機能関連定義を使用します。

サービスグループ情報関連定義を使用する場合

次に示す定義でイベントの送信先を指定しておくことで,指定したサービスグループ下のサーバUAPに対してイベントを送信します。

  • サービスグループ情報関連定義のeesvgdef定義コマンドの-tオプションにDBQを指定

  • DBキュー機能関連定義のdbqgrpdef定義コマンドの-tオプションを指定

  • DBキュー機能関連定義のdbqgrpdef定義コマンドの-eオプションにサービスグループ名を指定

DBキュー機能関連定義を使用する場合

DBキュー機能関連定義のdbqprcdef定義コマンドの-hオプションにイベントの送信先を指定し,RPC関連定義のrpc_tcpsend_con_max_cntオペランド,rpc_tcpsend_con_cntオペランド,およびrpc_tcpsend_proc_max_cntオペランドを指定することによって,TCP/IP共有送信用コネクションを使用してイベントを送信できます。

TCP/IP共有送信用コネクションの詳細については,マニュアル「TP1/Server Base Enterprise Option 使用の手引」のTCP/IP共有送信用コネクションに関する記述を参照してください。

• DBキュー表でイベントの送信先を管理する方法

DBキュー機能関連定義のdbqprcdef定義コマンドの-kオプションに1を指定し,RPC関連定義のrpc_tcpsend_con_max_cntオペランド,rpc_tcpsend_con_cntオペランド,およびrpc_tcpsend_proc_max_cntオペランドを指定することによって,TCP/IP共有送信用コネクションを使用してイベントの送信先を管理できます。

TCP/IP共有送信用コネクションを使用すると,イベントの送信先を動的に管理できるため,DBキューからメッセージを読み出すサーバを変更した場合,イベントの送信先も自動的に更新されます。

TCP/IP共有送信用コネクションの詳細については,マニュアル「TP1/Server Base Enterprise Option 使用の手引」のTCP/IP共有送信用コネクションに関する記述を参照してください。

(b) TCP/IP通信でイベントを送受信できない場合

TCP/IP通信でイベントを送受信できない場合について,状況別に説明します。

■ TP1/EEがサーバUAPの場合で,イベントを受信できないとき

• 不正なイベントを受信した場合

クライアントUAPから受信したイベントのサイズやヘッダ情報が不正である場合は,次の処理をします。

  1. エラーメッセージログを出力する。

  2. サイズ不正など,後続処理に影響がある障害が発生している場合は,該当コネクションを解放する。

• リソース不足を検知した場合

クライアントUAPからイベント受信時,受信バッファ不足によってイベント受信処理を実行できない場合は,リソース不足として次の処理をします。

  1. エラーメッセージを出力する。

  2. 該当コネクションを解放する。

■ TP1/EEがクライアントUAPの場合で,イベントを受信できないとき

• イベント送信エラーが発生した場合

イベント送信処理中に障害が発生し,送信エラーになった場合は,エラーメッセージを出力します。