ページの先頭行へ戻る
Interstage Application Server V13.0.0 GlassFish 設計・構築・運用ガイド
FUJITSU Software

2.19.9 事前配信

メッセージブローカは、事前配信機能を使用してコンシューマにメッセージを配信します。
事前配信機能を使用することにより、コンシューマの受信処理は、メッセージブローカとの通信が不要となるため、通信のオーバーヘッドが軽減されます。

注意

jms接続サービスを使用してJMSメッセージの送受信を行う場合は、事前配信機能が動作します。
メッセージブローカをEMBEDDED運用し、WebアプリケーションまたはEJBアプリケーションでJMSを使用する場合は、jmsdirect接続サービスを使用してTCP通信を介さずにJMSメッセージの送受信を行うため、事前配信機能はデフォルトで動作しません。

以下に事前配信処理を説明します。

単一コンシューマの事前配信処理

物理格納先から1つのコンシューマに事前配信される処理概要を、以下の図に示します。
Message-driven Beanの場合も同様に事前配信処理が行われます。
以下の図のコンシューマを、Message-driven Beanと読み替えてください。


[処理の流れ]

(1) コネクション開始

コンシューマがコネクションを開始すると、メッセージブローカに対して事前配信を要求します。

(2) 事前配信

物理格納先に設定されたconsumerFlowLimitを上限として、コンシューマに配信可能なメッセージを事前配信します。

上記の図の場合、メッセージブローカは、メッセージ3件(A,B,C)を事前配信します。

(3) 受信要求

コンシューマがメッセージの受信要求を行うと、事前配信されたメッセージが格納されている一時格納域に対してメッセージの配信を要求します。

(4) 配信

コンシューマは、メッセージ(A)を受信します。


複数コンシューマの事前配信処理(蓄積メッセージあり)

メッセージが蓄積されている物理格納先から複数のコンシューマに事前配信される処理概要を、以下の図に示します。
Message-driven Beanの場合も同様に事前配信処理が行われます。
以下の図のコンシューマを、Message-driven Beanと読み替えてください。

[処理の流れ]

(1) JMSクライアント3がメッセージ送信

プロデューサが物理格納先にメッセージを5件(A,B,C,D,E)送信します。

(2) JMSクライアント1がコネクション開始

コンシューマがコネクションを開始すると、メッセージブローカに対して事前配信を要求します。

(3) JMSクライアント1に事前配信

物理格納先に設定されたconsumerFlowLimitを上限として、コンシューマに配信可能なメッセージを事前配信します。
上記の図の場合、メッセージブローカは、メッセージ3件(A,B,C)を配信します。

(4) JMSクライアント2がコネクション開始

コンシューマがコネクションを開始すると、メッセージブローカに対して事前配信を要求します。

(5) JMSクライアント2に事前配信

物理格納先に設定されたconsumerFlowLimitを上限として、コンシューマに配信可能なメッセージを事前配信します。
上記の図の場合、メッセージブローカはメッセージ2件(D,E)を配信します。

(6) JMSクライアント1が受信要求

コンシューマは、メッセージ(A,B,C)の順番に受信します。
メッセージ(D,E)は、JMSクライアント2に事前配信済であるため、受信できません。

(7) JMSクライアント2が受信要求

コンシューマは、メッセージ(D,E)の順番に受信します。
メッセージ(A,B,C)は、JMSクライアント1に事前配信済であるため、受信できません。


複数コンシューマの事前配信処理(蓄積メッセージなし)

メッセージが蓄積されていない物理格納先から複数のコンシューマに事前配信される概要を、以下の図に示します。
Message-driven Beanの場合も同様に事前配信処理が行われます。
以下の図のコンシューマを、Message-driven Beanと読み替えてください。

[処理の流れ]

(1) JMSクライアント1がコネクション開始

コンシューマがコネクションを開始すると、メッセージブローカに対して事前配信を要求します。
しかし、物理格納先にメッセージが蓄積されていないため、事前配信が実施されません。

(2) JMSクライアント2がコネクション開始

コンシューマがコネクションを開始すると、メッセージブローカに対して事前配信を要求します。
しかし、物理格納先にメッセージが蓄積されていないため、事前配信が実施されません。

(3) JMSクライアント3がメッセージ送信

プロデューサが物理格納先にメッセージを5件(A,B,C,D,E)送信します。

(4) JMSクライアント1および2に事前配信

メッセージブローカは、物理格納先に設定されたconsumerFlowLimitを上限として、物理格納先に蓄積されたメッセージをランダムに振り分けます。
上記の図の場合は、以下を行います。

  1. JMSクライアント1にメッセージ3件(A,C,D)を事前配信します。

  2. JMSクライアント2にメッセージ2件(B,E)を事前配信します。

(5) JMSクライアント1が受信要求

コンシューマは、メッセージ(A,C,D)の順番に受信します。
メッセージ(B,E)は、JMSクライアント2に事前配信済であるため、受信できません。

(6) JMSクライアント2が受信要求

コンシューマは、メッセージ(B,E)の順番に受信します。

メッセージ(A,C,D)は、JMSクライアント1に事前配信済であるため、受信できません。


JMSクライアントのメモリ見積もり

メッセージブローカは事前配信処理を行うため、以下の式で使用するメモリを見積もってJMSクライアントを起動する必要があります。

(コンシューマの数 ×コンシューマが接続する物理格納先に設定されているconsumerFlowLimitの値 ×コンシューマが受信するメッセージサイズ) × 2 以上