集約ファンイン・フローの作成

集約ファンイン・フローは、ファンアウト・フローにより送信された要求メッセージへの応答を受信し、 受信されたすべての応答を含む結合された応答メッセージを構成します。

始める前に:

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

指定したタイムアウト値によっては、結合された応答メッセージは、 すべての応答がファンイン・フローによって受信される前に生成されることもあります。

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

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

  1. 「ブローカー・アプリケーション開発 (Broker Application Development)」パースペクティブに切り替えます。
  2. ファンイン処理を提供するためにメッセージ・フローを作成します。
  3. 以下のノードをエディター・ビューに追加して、以下に示されているとおりにこれらを構成および接続します。
    Input ノード
    入力ノードは、ファンアウト・フローから生成された多重要求メッセージに対する応答を受信します。

    これは、要求/応答モデルをサポートする入力ノードでなければなりません。 要求/応答をサポートする、組み込みノード MQeInput および MQInput、またはユーザー定義の入力ノードあるいはこれらのノードの混合を使用することができます (これらの応答を送信するアプリケーションの要件に応じて異なります)。 それぞれの入力ノードによって受信された応答は、 対応する要求と同じプロトコルを介して送信されなければなりません (たとえば、 ファンアウト・フロー内に MQOutput ノードを組み込む場合には、 その要求への応答は、このフロー内の MQInput ノードによって受信されなければなりません)。

    1. 入力ノードを右マウス・ボタンでクリックし、 「プロパティー (Properties)」をクリックします。
    2. このノードの入力メッセージのソースを指定します。 たとえば、MQInput ノードがメッセージの検索元とする基本プロパティー Queue Name 内に、WebSphere MQ キューの名前を指定します。
    3. オプション: このノードのために構成したいその他のプロパティーの値を指定します。
    4. 入力ノードの out ターミナルを、AggregateReply ノードの in ターミナルに接続します。

      これは、最も単純な構成を表します。 適当であれば、入力ノードと AggregateReply ノードとの間に他のノードを組み込むことができます。 たとえば、監査のために応答を (Warehouse ノードに) 保管したい場合もあります。

    AggregateReply ノード
    AggregateReply ノードは、in ターミナルを介して入力ノードからインバウンド応答を受信します。 AggregateReply ノードが受け取った各応答メッセージは、 ブローカー・データベースに恒久的に保管されます。

    集約要求の特定のグループに対するすべての応答が収集されると、AggregateReply ノードは、集約された応答メッセージを作成し、out ターミナルを介して集約された応答メッセージを伝搬します。

    1. AggregateReply ノードを右マウス・ボタンでクリックし、 「プロパティー (Properties)」をクリックします。
    2. この集約を識別するには、AggregateReply ノードの「集約名 (Aggregate Name)」プロパティーを設定します。 この値が、ファンアウト・フロー内の対応する AggregateControl ノードにある 「集約名 (Aggregate Name)」プロパティーに対する値と同じになるよう設定してください。
    3. オプション: 不明なターミナルに伝搬する前に、認識されないメッセージを保存したい場合には、 「不明なメッセージ・タイムアウト (Unknown Message Timeout)」の値を設定してください。 別個のファンアウトおよびファンイン・フローを使用する場合、 制御メッセージの到着に遅れが生じないように、この値をゼロ以外の数に設定することもできます。
    4. オプション: 認識されないメッセージを明示的に処理したい場合には、 別のノードまたはノードのシーケンスに不明なターミナルを接続してください。 メッセージ・フロー内の別のノードにこのターミナルを接続しない場合には、 このターミナルを介して伝搬されるメッセージは廃棄されます。
    5. オプション: AggregateControl ノードでこの集約のタイムアウト値を指定した場合、 すべての応答が受信される前に有効期限が切れるタイムアウトを明示的に処理したいなら、 タイムアウト・ターミナルを別のノードまたはノードのシーケンスに接続してください。 タイマーが切れる場合、部分的に完全な集約された応答は、タイムアウト・ターミナルに送信されます。 メッセージ・フロー内の別のノードにこのターミナルを接続しない場合には、 このターミナルを介して伝搬されるメッセージは廃棄されます。
    6. オプション: このノードのために構成したいその他のプロパティーの値を指定します。
    7. AggregateReply ノードの out ターミナルを Compute ノードの in ターミナルに接続します。

    また、AggregateReply ノードは、 ファンアウト・フロー上の対応する AggregateControl ノードによって送信された (ファンアウトおよびファンイン集約フローの関連付けで説明されているとおり、直接または間接的に) 制御メッセージを制御ターミナル上に受信します。 この制御メッセージの内容を変更しないでください。

    Compute ノード
    Compute ノードは結合された応答を含むメッセージを受信します。 この結合メッセージが、出力に対して有効なフォーマットではない可能性があります。 有効な出力メッセージを作成するようにこのノードを構成しなければなりません。
    1. Compute ノードを右マウス・ボタンでクリックし、 「プロパティー (Properties)」をクリックします。
    2. 基本プロパティー「ESQL モジュール (ESQL Module)」内にこのノードの機能をカスタマイズする ESQL モジュールの名前を指定します。
    3. ノードを右マウス・ボタンでクリックし、 「ESQL のオープン (Open ESQL)」をクリックして、 このノードのモジュールを含む ESQL ファイルを開きます。 ESQL エディター・ビューでモジュールが強調表示されます。
    4. 入力メッセージ内の集約された応答から単一の出力メッセージを作成するように ESQL をコーディングします。

      out ターミナルを介して伝搬される集約された応答メッセージの構造、 およびメッセージの内容へのアクセス方法に関する情報は、 結合メッセージの内容へのアクセスで提供されています。

    5. オプション: このノードのために構成したいその他のプロパティーの値を指定します。
    6. Compute ノードの out ターミナルを、 単一の応答メッセージの宛先を表す出力ノードの in ターミナルに接続します。
    Output ノード
    ファンイン・フローの出力ノードを組み込みます。 これは、組み込みノードのいずれかまたはユーザー定義の出力ノードにすることができます。
    1. 出力ノードを右マウス・ボタンでクリックし、 「プロパティー (Properties)」をクリックします。
    2. このノードの出力メッセージの宛先を指定します。 たとえば、MQOutput ノードのメッセージの送信先となる基本プロパティー「キュー名 (Queue Name)」内に WebSphere MQ キューの名前を指定します。
    3. オプション: このノードのために構成したいその他のプロパティーの値を指定します。
  4. Ctrl-S を押して、メッセージ・フローを保管し、その構成を検証します。

結合メッセージの内容へのアクセス

AggregateReply ノードは、ComIbmAggregateReplyBody と呼ばれる Root の下の結合メッセージ・ツリー内にフォルダーを作成します。 この下に、AggregateRequest ノードで設定したフォルダー名を使用する、いくつかのフォルダーを作成します。 関連した応答メッセージは、その下に置かれます。

たとえば、要求メッセージが次のフォルダー名を持つとします。

  • TAXI
  • HOTEL

結果として AggregateReply ノードによって作成される集約応答メッセージは、以下に示すような構造を持つことになります。


これは、Root の下のエレメント ComIbmAggregateReplyBody の下に作成された、 集約されたメッセージ内容のツリーのダイアグラムです。 その内容は、これを囲むテキストで説明されています。

Compute ノードを使用して、タクシー会社からの応答にアクセスするには、次の相関名を使用します。

InputRoot.ComIbmAggregateReplyBody.TAXI.xyz

フォルダー名は固有でなくてかまいません。 フォルダー名が TAXI の要求が複数ある場合、配列添え字表記法を使用して個々の応答にアクセスできます。以下に例を示します。

InputRoot.ComIbmAggregateReplyBody.TAXI[1].xyz
InputRoot.ComIbmAggregateReplyBody.TAXI[2].xyz

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

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

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