集約ファンアウト・フローの作成

集約ファンアウト・フローは、初期入力メッセージを受け取ると、 それを再構築してさまざまなターゲット・アプリケーションへの要求を表示します。

始める前に:

このタスクを実行するには、以下のタスクを完了している必要があります。

ファンアウト・フローの例を検討するには、WebSphere Business Integration Message Broker で提供されている 航空機 (Airline) サンプルを参照してください。

ファンアウト・フローを作成するには、以下のようにします。

  1. 「ブローカー・アプリケーション開発 (Broker Application Development)」パースペクティブに切り替えます。
  2. ファンアウト処理を提供するために新しいメッセージ・フローを作成します。
  3. 以下のノードをエディター・ビューに追加して、 以下に示されているとおりにこれらを構成および接続します。
    Input ノード
    入力ノードは、多重要求メッセージが生成元である入力メッセージを受け取ります。 これは、組み込みノードのいずれかまたはユーザー定義の入力ノードにすることができます。
    1. 入力ノードを右マウス・ボタンでクリックし、 「プロパティー (Properties)」をクリックします。
    2. このノードの入力メッセージのソースを指定します。 たとえば、MQInput ノードがメッセージの検索元とする基本プロパティー Queue Name 内に、WebSphere MQ キューの名前を指定します。
    3. オプション: このノードのために構成したいその他のプロパティーの値を指定します。
    4. 入力ノードの out ターミナルを、AggregateControl ノードの in ターミナルに接続します。

      これは、最も単純な構成を表します。 適当であれば、入力ノードと AggregateControl ノードとの間に他のノードを組み込むことができます。 たとえば、監査のために要求を (Warehouse ノードで) 保管したり、 または固有 ID をメッセージに (Compute ノードで) 追加したい場合もあります。

    AggregateControl ノード
    AggregateControl ノードは、AggregateRequest ノードが必要とする情報を持つ入力メッセージに関連した LocalEnvironment を更新します。
    1. AggregateControl ノードを右マウス・ボタンでクリックし、 「プロパティー (Properties)」をクリックします。
    2. この特定の集約を識別するには、 AggregateControl ノードの「集約名 (Aggregate Name)」プロパティーを設定します。 このプロパティーは、後にこの AggregateControl ノードを、特定の AggregateReply ノードに関連付けるために使用されます。 指定する「集約名 (Aggregate Name)」は、 ブローカー内でコンテキストに応じて固有でなければなりません。
    3. オプション: 「タイムアウト (Timeout)」プロパティーを設定して、 応答がいくつかのアクションを実行するまでブローカーが待機する時間を指定します (集約のタイムアウトの設定で説明されています)。
    4. このターミナルに伝搬される入力メッセージ内の要求の分析および明細を提供する 1 つ以上の Compute ノードの in ターミナルに、 AggregateControl ノードの out ターミナルを接続します。
    5. また、ファンイン・フロー上の対応する AggregateReply ノードに (ファンアウトおよびファンイン集約フローの関連付けで説明されているとおり、 直接または間接的に) 制御ターミナルを接続します。 AggregateControl ノードは、このターミナルを介して制御メッセージを伝搬します。 このメッセージの内容を変更しないでください。 ただし、たとえば MQOutput ノードを通して、AggregateReply ノードにメッセージを間接的に渡す場合、 Compute ノードを組み込んで、該当するヘッダーをメッセージに追加し、 安全に送信されることを確かめる必要があります。
    Compute ノード
    Compute ノードは入力メッセージから情報を取り出し、新規の出力メッセージを構成します。

    サブタスク要求を処理するターゲット・アプリケーションが単一の入力メッセージから必要な情報を取り出せる場合、メッセージを分割するために Compute ノードを組み込む必要はありません。 すべてのターゲット・アプリケーションに入力メッセージ全体を渡すことができます。

    ターゲット・アプリケーションが、入力メッセージ全体ではなく、個々の要求を受信することが予期される場合、 入力メッセージからそれぞれ個々のサブタスク出力メッセージを生成するために Compute ノードを組み込まなければなりません。 それぞれの出力メッセージに入力メッセージの適切なサブセットをコピーして、 以下の方法でそれぞれの Compute ノードを構成してください。

    1. Compute ノードを右マウス・ボタンでクリックし、 「プロパティー (Properties)」をクリックします。
    2. 基本プロパティー「計算モード (Compute Mode)」の値を選択します。 このプロパティーは、ノードによって変更されるメッセージ・ツリーのセクションを指定します。

      AggregateControl ノードは、メッセージが到着するとき AggregateRequest ノードが読み取る入力メッセージ内の LocalEnvironment ツリーにエレメントを挿入します。 LocalEnvironment が、Compute ノード内の入力メッセージから出力メッセージに確実にコピーされるようにしてください。 これは、LocalEnvironment (AllLocalEnvironmentLocalEnvironment and Message、または Exception and LocalEnvironment のうちの 1 つ) を含む値を指定しない限り、自動的に行われます。

      これらの値のいずれかを指定する場合、 ブローカーは、ユーザーが LocalEnvironment に書き込む ESQL で Compute ノードをカスタマイズし、 出力メッセージ内で必要なそのツリー内の任意のエレメント上にコピーすると想定します。

      LocalEnvironment を変更したい場合には、以下のステートメントを追加し、 入力メッセージから出力メッセージに必要な集約情報をコピーしてください。

      SET OutputLocalEnvironment.ComIbmAggregateControlNode =
                      InputLocalEnvironment.ComIbmAggregateControlNode;
    3. オプション: このノードのために構成したいその他のプロパティーの値を指定します。
    4. それぞれの Compute ノードの out ターミナルを、 このノード内の入力メッセージから作成した出力要求メッセージの宛先を表す出力ノードの in ターミナルに接続します。
    Output ノード
    ファンアウト・フロー内に生成するそれぞれの出力メッセージごとに出力ノードを組み込みます。 それぞれの宛先ごとに適切な変更を加え、以下で説明されているように各ノードを構成してください。

    これは、要求/応答モデルをサポートする出力ノードでなければなりません。 要求/応答をサポートする、組み込みノード MQeOutput および MQOutput、またはユーザー定義の出力ノード、 あるいはこれらのノードの混合を使用することができます (これはターゲット・アプリケーションの要件に応じて異なります)。

    1. 出力ノードを右マウス・ボタンでクリックし、 「プロパティー (Properties)」をクリックします。
    2. このノードの出力メッセージの宛先を指定します。 たとえば、MQOutput ノードのメッセージの送信先となる基本プロパティー「キュー名 (Queue Name)」内に WebSphere MQ キューの名前を指定します。 ターゲット・アプリケーションは、その要求を処理し、その入力メッセージ内に示されている応答宛先 (たとえば、WebSphere MQ ReplyToQueue) に応答を送信しなければなりません。
    3. 左側のビューで「要求 (Request)」をクリックし、これらのプロパティーの値を設定して、 応答がファンイン・フローの入力キューに送信されることを指定します。
    4. オプション: このノードのために構成したいその他のプロパティーの値を指定します。
    5. 出力ノードの out ターミナルを、AggregateRequest ノードの in ターミナルに接続します。 メッセージが出力ノードの out ターミナルを通して伝搬されると、 組み込み出力ノードは、 関連する LocalEnvironment 内の WrittenDestination フォルダーを AggregateRequest ノードが必要とする追加情報に更新します。

      組み込みノードが書き込む情報は、キュー名、キュー・マネージャー名、(MQMD からの) メッセージ ID、(MQMD からの) 相関 ID、 およびメッセージ応答 ID (メッセージ ID と同じ値に設定される) です。

      ユーザー定義の出力ノードを使用する場合、そのノードが同じ情報を WrittenDestination に保管することを確認してください。 詳細については、サポートされる集約のプロトコルを参照してください。

    AggregateRequest ノード
    ファンアウト・フロー内に生成するそれぞれの出力メッセージごとに AggregateRequest ノードを組み込みます。
    1. 出力ノードを右マウス・ボタンでクリックし、 「プロパティー (Properties)」をクリックします。
    2. 基本プロパティー「フォルダー名 (Folder Name)」を、 送信された要求のタイプを識別する値に設定します。 この値は、応答メッセージがファンイン・フロー内で受信される際に、 その応答メッセージと一致する AggregateReply ノードにより使用されます。 ファンアウト・フローが生成するそれぞれの要求ごとに指定するフォルダー名は固有でなければなりません。

    AggregateRequest ノードは、処理するそれぞれのメッセージごとにブローカー・データベース内にレコードを作成します。 これにより、AggregateReply ノードは、それぞれの応答が関連付けられる要求を識別することができます。 出力ノードが非トランザクションである場合、このデータベースの更新がコミットされる前に、 応答メッセージがファンイン・フローに着信することがあります。 これを避けるためにタイムアウトを使用する方法の詳細については、集約のタイムアウトの設定を参照してください。

  4. Ctrl-S を押して、メッセージ・フローを保管し、その構成を検証します。

関連概念
メッセージ・フロー
LocalEnvironment ツリー
メッセージ・フローの集約
ユーザー定義の入力ノード
ユーザー定義の出力ノード

関連タスク
集約フローの構成
集約ファンイン・フローの作成
ファンアウトおよびファンイン集約フローの関連付け
集約のタイムアウトの設定
複数の AggregateControl ノードの使用
集約フロー内の例外およびデータベース・デッドロックの処理
メッセージ・フローの設計
メッセージ・フローの作成
メッセージ・フローの内容の定義
複数の出力メッセージの生成
ユーザー定義拡張機能の開発

関連資料
AggregateControl ノード
AggregateReply ノード
AggregateRequest ノード
Compute ノード
MQeInput ノード
MQeOutput ノード
MQInput ノード
MQOutput ノード