集約ファンアウト・フローは、初期入力メッセージを受け取ると、それを再構築してさまざまなターゲット・アプリケーションへの要求を表示します。
始める前に:
同じメッセージ・フロー内にファンアウトおよびファンイン・フローを組み込むことは可能です。ただし、2 つの別々のフローを作成してもかまいません。 別個のメッセージ・フローを構成することの利点について詳しくは、ファンアウトおよびファンイン集約フローの関連付けを参照してください。
ファンアウト・フローを作成するには、以下のようにします。
ただし、制御メッセージを AggregateControl ノードから AggregateReply ノードに送信したい場合、制御ターミナルを、ファンイン・フロー上の対応する AggregateReply ノードに (ファンアウトおよびファンイン集約フローの関連付けで説明されているとおり、直接または間接的に) 接続する必要があります。 例えば MQOutput ノードを介する場合などして、AggregateReply ノードに間接的に接続する場合、Compute ノードを組み込んで、該当するヘッダーをメッセージに追加し、安全に送信されることを確かめる必要があります。
さらに、制御ターミナルとそこからの接続を認識させるには、環境変数 MQSI_AGGR_COMPAT_MODE を使用可能にする必要があります。 ただし、このオプションを選択すると、メッセージ集約のパフォーマンスおよび動作に関係する影響があります。 これらの影響および環境変数の完全な説明については、集約フローでの制御メッセージの使用を参照してください。
サブタスク要求を処理するターゲット・アプリケーションが単一の入力メッセージから必要な情報を取り出せる場合、 メッセージを分割するために Compute ノードを組み込む必要はありません。 すべてのターゲット・アプリケーションに入力メッセージ全体を渡すことができます。
ターゲット・アプリケーションが、入力メッセージ全体ではなく、個々の要求を受信することが予期される場合、 入力メッセージからそれぞれ個々のサブタスク出力メッセージを生成するために Compute ノードを組み込まなければなりません。 それぞれの出力メッセージに入力メッセージの適切なサブセットをコピーして、 以下の方法でそれぞれの Compute ノードを構成してください。
これらの値のいずれかを指定する場合、ブローカーは、ユーザーが LocalEnvironment に書き込む ESQL で Compute ノードをカスタマイズし、 出力メッセージ内で必要なそのツリー内の任意のエレメント上にコピーすると想定します。
LocalEnvironment を変更したい場合には、以下のステートメントを追加し、入力メッセージから出力メッセージに必要な集約情報をコピーしてください。
SET OutputLocalEnvironment.ComIbmAggregateControlNode = InputLocalEnvironment.ComIbmAggregateControlNode;
出力ノードは、MQOutput ノードなどの、要求/応答モデルをサポートする出力ノード、あるいはこれらのノードの混合でなければなりません (これはターゲット・アプリケーションの要件に応じて異なります)。
組み込みノードが書き込む情報は、キュー名、キュー・マネージャー名、(MQMD からの) メッセージ ID、(MQMD からの) 相関 ID、 およびメッセージ応答 ID (メッセージ ID と同じ値に設定される) です。
AggregateRequest ノードは、 処理するそれぞれのメッセージごとに WebSphere MQ 内にレコードを作成します。 このレコードにより、AggregateReply ノードは、それぞれの応答が関連付けられる要求を識別することができます。 出力ノードが非トランザクションである場合、このデータベースの更新がコミットされる前に、応答メッセージがファンイン・フローに着信することがあります。 この状態を避けるためにタイムアウトを使用する方法の詳細については、集約のタイムアウトの設定を参照してください。