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

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

始める前に:

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

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

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

同じメッセージ・フロー内にファンアウトおよびファンイン・フローを組み込むことは可能です。 ただし、2 つの別個のフローを作成する方が良いでしょう。同じファンイン・フローの複数のコピーを同じ実行グループまたはさまざまな実行グループ内にデプロイしないでください。 別個のメッセージ・フローを構成することの利点について詳しくは、ファンアウトおよびファンイン集約フローの関連付けを参照してください。

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

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

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

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

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

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

    注: 上記のとおり、ファンイン・フローの先頭で集約応答メッセージのすべてを受け取る 1 つの入力ノードを用意すると良いでしょう。複数のノードではなく 1 つのノードを使用することにより、特定の応答入力ノード・スレッドが、常にメッセージ・フローの集約および実行を完了することはなくなる一方で、他のノードが応答メッセージを Aggregate Reply (後でタイムアウトになる) に送信するようになります。1 つの単一入力ノードを使用すると、集約ごとに応答の順次処理がより良く行われるようになりますが、追加のインスタンスを使用して正常に拡大することができ、処理能力を向上させることができます。
    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 ノードは結合された応答を含むメッセージを受信します。この結合メッセージが、出力に対して有効なフォーマットではない可能性があります。集約応答メッセージは独特の構造であり、一部のノード (MQOutput ノードなど) で必要なビット・ストリームに変換できないためです。out およびタイムアウト・ターミナルは、常に集約応答メッセージを出力するため、MQOutput ノードの前に常に追加の処理が必要になります。したがって、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, 2006 最終更新: 08/21/2006
ac12300_