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

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

始める前に:

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

このタスクを完了する前に、メッセージ・フローの集約に関する概要をお読みになることもお勧めします。

ファンアウト・フローがトランザクションであるかどうかによって、また、そうでない場合には、指定したタイムアウト値によって、結合された応答メッセージは、すべての応答がファンイン・フローによって受信される前に生成されることもあります。 このトピックの詳細については、集約ファンアウト・フローの作成を参照してください。

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

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

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

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

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

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

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

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

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

    ただし、ファンアウト・フロー上の対応する AggregateControl ノードによって送信された制御メッセージを、制御ターミナル上で AggregateReply ノードが受け取るようにしたい場合、集約ファンアウト・フローの作成で説明されているように、必要な接続を作成しなければなりません。 AggregateReply ノードから出力ノードへのパスは、可能な限り直接にすることをお勧めします。 ファンイン・フローを短く保つと、集約のパフォーマンスに利点があります。 この制御メッセージの内容を変更しないでください。

    さらに、制御ターミナルとそこへの接続を認識させるには、環境変数 MQSI_AGGR_COMPAT_MODE を使用可能にする必要があります。 ただし、このオプションを選択すると、メッセージ集約のパフォーマンスおよび動作に関係する影響があります。 これらの影響および環境変数の完全な説明については、集約フローでの制御メッセージの使用を参照してください。

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

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

    5. オプション: このノードのために構成したいその他のプロパティーの値を指定します。
    6. Compute ノードの out ターミナルを、単一の応答メッセージの宛先を表す出力ノードの in ターミナルに接続します。
    Output ノード
    ファンイン・フローの出力ノードを組み込みます。 これは、組み込みノードのいずれかまたはユーザー定義の出力ノードにすることができます。
    1. 出力ノードを右マウス・ボタンでクリックし、「プロパティー」をクリックします。
    2. このノードの出力メッセージの宛先を指定します。 たとえば、MQOutput ノードのメッセージの送信先となる基本プロパティー「キュー名」内に 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
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2005 Last updated: 11/07/2005
ac12300_