同期集約と非同期集約の比較

集約は、リストに追加される新しい要素に基づいて完了するか (最大サイズが指定されている場合)、タイムアウトや期間の完了によって完了します。要素のリストを使用して実行するコンポーネントのチェーンは集約の種別によって決まるため、これは重要です。 集約完了のトリガーには、同期と非同期の 2 つがあります。

アグリゲーターに関連付けられた各時間カウンターは、グループの最初のメッセージが到着した瞬間から計数を開始します。集約が完了すると、カウンターはリセットされ、次の要素の到着を待ちます。
単一グループのアグリゲーター (時間ベースおよびサイズベースのアグリゲータースコープ) の場合、時間カウンターは 1 つのみですが、グループベースのアグリゲーターの場合、グループごとに 1 つのカウンターがあります。

同期集約

新しい要素が到着したことで完了した集約の場合 (同期)、次のうち少なくとも 1 つの動作が発生します。

  • アグリゲータースコープが ​[Aggregation complete (集約完了)]​ ルートで設定されている場合、そのルート内のコンポーネントは、集約された要素のリストであるペイロードを使用して実行されます。

  • アグリゲータースコープに、参照されている ​[Aggregator listener (アグリゲーターリスナー)]​ がある場合、そのリスナーが属するフローは、集約された要素のリストであるペイロードを使用して実行されます。

非同期集約

期間が終了したまたはタイムアウトに達したことで完了した集約の場合 (非同期)、次の 1 つの動作が発生する可能性があります。アグリゲータースコープに、参照されている ​[Aggregator listener (アグリゲーターリスナー)]​ があり、リスナーでタイムアウト集約を受け入れている場合、そのリスナーが属するフローは、集約された要素のリストをペイロードとして実行します。

アグリゲーターを使用する Mule アプリケーションの処理ロジックの配置

アグリゲーターを使用する Mule アプリケーションを作成する場合、処理ロジックを次のように配置します。

  • 集約が時間に依存する場合、​[Aggregation listener (集約リスナー)]​ をソースとする異なるフローに処理ロジックを追加します。

  • 到達したサイズに依存する場合、​[Aggregation complete (集約完了)]​ ルートに処理ロジックを追加します。

  • 時間とサイズの両方に依存する場合は、次のように配置します。

    • ソースのないサブフローにメインロジックを追加します。​[Is aggregation complete (集約完了)]​ 属性で、集約が終了した方法が示されます。

    • [Aggregation complete (集約完了)]​ ルート内のメインロジックフローに ​Flow reference​ コンポーネントを追加します。サブフローがこのフロー参照により実行される場合、​[Is aggregation complete (集約完了)]​ 属性は ​true​ になります。

    • アグリゲーターをリスンし、タイムアウトグループを受け入れる ​[Aggregation listener (集約リスナー)]​ を使用する別のフローを追加します。リスナーの後に、メインロジックサブフローをコールする ​Flow reference​ コンポーネントを続けます。この場合、​[Is aggregation complete (集約完了)]​ 属性は ​false​ になります。