複数の AggregateControl ノードの使用

「集約名 (Aggregate Name)」プロパティーの値セットがすべて同じで 「タイムアウト (Timeout)」プロパティーの値が異なる 複数の AggregateControl ノードを持つファンアウト・フローを設計することが役に立つ場合もあります。 「集約名 (Aggregate Name)」を再使用できるのは、この場合だけです。

始める前に:

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

たとえば、出張旅行を予約する集約フローを作成した場合、2 日以内に応答が必要な要求がある一方で、2 時間以内に応答が必要な、より緊急性の高い要求もあるかもしれません。

複数の AggregateControl ノードを使用する集約フローを構成するには、以下のようにします。

  1. 「ブローカー・アプリケーション開発 (Broker Application Development)」パースペクティブに切り替えます。
  2. ファンアウト・メッセージ・フローを作成するか、または開きます。
  3. 必要な数の AggregateControl ノードを構成します。 基本プロパティー「集約名 (Aggregate Name)」を同じ値に設定します。 たとえば、2 つのノードを組み込み、両方に「集約名 (Aggregate Name)」として JOURNEY という名前を入力します。
  4. それぞれのノードの「タイムアウト (Timeout)」 プロパティーの値を異なる値に設定します。 たとえば、1 つ目のノードの「タイムアウト (Timeout)」を 2 時間に、2 つ目のノードの「タイムアウト (Timeout)」を 2 日間に設定します。
  5. 着信要求を受信するように Filter ノードを構成し、 その内容をチェックし、それらの着信要求を正しい AggregateControl ノードに経路指定します。
  6. 必要な結果を得るには、ノードを一緒に接続します。 たとえば、優先順位フィールドを「urgent (緊急)」に設定して、 要求をテストするように Filter ノードを構成した場合、 短いタイムアウトを設定して True ターミナルを AggregateControl ノードに接続します。 より長いタイムアウトで false ターミナルを AggregateControl ノードに接続します。 AggregateControl ノードの out ターミナルをファンアウト・フロー内の以下のノードに接続します。

    2 つの AggregateControl ノードを直列にではなく、並列に接続する必要があります。 つまり、両方のノードを Filter ノードに (1 つを true ターミナル、 もう 1 つを false ターミナルに)、および両方のノードをファンアウトに対して要求を処理する、 ダウンストリーム・ノードに接続する必要があります。 それぞれの入力メッセージは、AggregateControl ノードのうちの 1 つのみを通過しなければなりません。 単一のメッセージが複数の AggregateControl ノードによって処理されるようにノードを接続する場合、 重複レコードが AggregateRequest ノードによってデータベース内に作成され、後続の処理結果は予測不能です。

以下の図では、この技法を使用するファンアウト・メッセージ・フローの例が説明されます。


ファンアウト・メッセージ・フローは、Filter ノードを使用してインバウンド要求の緊急度を判別し、 小さいまたは大きいタイムアウト値 (これによって、応答が待機する時間の長さを判別する) を設定する 2 つの AggregateControl ノードの 1 つに対するテストの結果に基づいて、その要求を送信します。

関連概念
メッセージ・フロー
メッセージ・フローの集約

関連タスク
集約フローの構成
集約ファンアウト・フローの作成
集約ファンイン・フローの作成
ファンアウトおよびファンイン集約フローの関連付け
集約のタイムアウトの設定
集約フロー内の例外およびデータベース・デッドロックの処理
メッセージ・フローの設計
メッセージ・フローの作成
メッセージ・フローの内容の定義

関連資料
AggregateControl ノード
AggregateReply ノード
AggregateRequest ノード