2.4.1 DBキューを使用したAP間通信
DBキューとサービス関数の接続形態には,単接続と複接続とがあります。
DBキューにメッセージが書き込まれると,サービストランザクションが起動されます。起動されたサービストランザクションがコミットされると,要求先サービス関数が起動されます。
単接続と複接続の接続形態,およびサービス関数起動の概念図を次に示します。
(1) 単接続
単接続の接続形態とサービス関数起動について説明します。
(a) 接続形態
DBキューと要求先サービス関数とが1対1で対応する接続方法です。DBキューに書き込まれたメッセージに対応する要求先サービス関数を起動し,メッセージを引き渡します。
(b) サービス関数起動
図2-29のサービス関数1が起動したサービストランザクションから,DBキュー1に1メッセージ,DBキュー2に2メッセージが書き込まれた場合,サービス関数2,およびサービス関数3が起動されます。コミット時にスケジュールされるトランザクションは,サービス関数2,サービス関数3で1トランザクションずつです。DBキュー2に2メッセージが書き込まれても,サービス関数3で同時に2トランザクション起動されることはありません。
(2) 複接続
複接続の接続形態とサービス関数起動について説明します。
(a) 接続形態
DBキューと要求先サービス関数とがn対1で対応する接続方法です。複数のDBキューに書き込まれたメッセージはDBキュー単位で読み出され,順にサービス関数に引き渡されます。
(b) サービス関数起動
図2-29のサービス関数4と接続されているDBキューグループに対して,1トランザクションで複数のDBキューに書き込みがあった場合,メッセージ読み出しスケジュール方式に従い,順に読み出されてサービス関数4を起動します。
サービス関数の起動はDBキュー単位でシリアライズされるため,一つのサービス関数に対して最大で接続DBキュー数分のトランザクションが同時に起動されます。
- サービストランザクション起動の多重管理
-
サービス関数からDBキューにメッセージの書き込み要求をしたとき,一つのメッセージに対して一つのサービストランザクションが起動されます。そのため,複数のDBキューにメッセージの書き込み要求をすると,一時的に多数のサービストランザクションが起動されます。
DBキュー機能関連定義のdbqsrvdef定義コマンドで,サービス単位に同時に起動させるトランザクションの最大数を指定することで,起動するサービストランザクション数を制限できます。
- メッセージ読み出しスケジュール方式
-
DBキューからメッセージを読み出すときには,次のスケジュール方式があります。
-
優先スケジュール方式
DBキュー機能関連定義のdbqsrvdef定義コマンドの-qオプションで最初に指定されたDBキューから毎回読み出します。
DBキュー機能関連定義のdbqsrvdef定義コマンドの-qオプションで最初に指定されたDBキューにメッセージがない場合,DBキュー機能関連定義のdbqsrvdef定義コマンドの-qオプションの2番目以降に指定されたDBキューから,1メッセージずつ読み出します。
-
均等スケジュール方式
DBキュー機能関連定義のdbqsrvdef定義コマンドの-qオプションに指定した順番に,DBキューから,1メッセージずつ読み出します。
スケジュール方式は,DBキュー機能関連定義のdbqsrvdef定義コマンドの-cオプションで指定します。
サービス単位に同時に起動できる最大トランザクション数を1としたときの優先スケジュール方式と均等スケジュール方式を,次の図に示します。
図2‒30 スケジュール方式 -