Scatter-Gather ルータ

Scatter-Gather コンポーネントは、ルーティングイベントプロセッサです。Mule イベントを複数の並列ルートにコピー (スキャッタ) し、各ルートはサブフローと同様の 1 つまたは複数のイベントプロセッサのシーケンスとなります。各ルートは、個別のスレッドを使用して Mule イベントを作成し、各イベントは自身のペイロード、属性、そして変数を持ちます。その後、Scatter-Gather コンポーネントは、各ルートからの Mule イベントを統合 (ギャザー) し、統合した Mule イベントを次のイベントプロセッサに渡します。Scatter-Gather コンポーネントは、すべてのルートが正常に完了した場合にのみ、統合した Mule イベントを次のイベントプロセッサに渡します。

Scatter-Gather コンポーネントは、複数のルートを (順次ではなく) 並列に実行します。ルートを並列実行することで、Mule アプリケーションの効率が大幅に向上し、順次処理よりも多くの情報を提供できます。

scatter gather concept 56ccc
1 本のルートだけで Scatter-Gather コンポーネントを設定することはできません。2 本以上のルートで Scatter-Gather コンポーネントが設定されていないフローがあると、Mule アプリケーションは例外をスローします。

Scatter-Gather ルート内で生成されたエラーの処理方法

Scatter-Gather コンポーネントの各ルートで Try スコープを使用して、ルートのイベントプロセッサで生成されるエラーを処理できます。ルート内の問題によってスローされた未処理のエラーがあると、Scatter-Gather コンポーネントも MULE:COMPOSITE_ERROR 型のエラーをスローします。コンポーネントは、すべてのルートが完了または失敗した後で、このエラーをスローします。イベント処理は、フローの Scatter-Gather コンポーネントより先には進みません。その代わりに、フローはエラー処理イベントプロセッサに分岐します。MULE:COMPOSITE_ERROR エラーオブジェクトは、失敗したルートからのエラーだけではなく、完了したルートからの Mule イベントも収集します。これによってアプリケーションは、完了したルートからの Mule イベントを、エラー処理イベントプロセッサを使用して処理できます。

2 つのケースを使用して、この仕組みを分かりやすく説明します。1 つ目は、Scatter-Gather コンポーネントの各ルートに Try スコープがあるケースです。いずれか 1 本のルートでエラーが生成され、そのルートの Try スコープによって正常に処理されたため、そのルートでは Mule イベントを生成できます。Scatter-Gather コンポーネントは、通常通りにすべてのルートからの Mule イベントを統合して新しい Mule イベントを生成し、統合したイベントを次のイベントプロセッサに渡します。

2 番目は、ルートでエラーが発生するケースです。このルートには Try スコープがないか、または Try スコープがあっても処理できない種類のエラーが発生しています。他のルートはすべて完了しましたが、1 本の失敗したルートによって Scatter-Gather コンポーネントは MULE.COMPOSITE ERROR エラーをスローし、 フローはこのエラーを、フローで設定されている Error Handler コンポーネントに渡します。エラー処理イベントプロセッサは、完了したルートからの Mule イベントを処理できます。

Scatter-Gather タイムアウトエラーの処理方法

Scatter-Gather コンポーネントでは、タイムアウトを設定できます。タイムアウトで設定されている時間内にルートの処理が完了しないと、そのルートは MULE:TIMEOUT エラーをスローします。このエラーは、ルートで発生する他のエラーと同じように処理されます。各ルートが (最後のイベントプロセッサが完了するか、または MULE:TIMEOUT エラーをスローして) 完了すると、成功した結果とエラーが Scatter-Gather コンポーネントによって収集され、MULE:COMPOSITE エラーとしてスローされます。このエラーは、エラーハンドラで処理されます。

Scatter-Gather コンポーネントの使い方の詳細を見るには、Anypoint Studio で Anypoint Exchange からサンプルプロジェクトの Scatter-Gather Flow Control (スキャッタギャザーフロー制御) をダウンロードします。このサンプルは、データを並列に集約して結果を JSON で返すための Scatter-Gather 制御フローを示します。

また、このサンプルは用意されているデータを、集約する 2 つのリソースへの入力として使用します。このデータは、2 人の取引先責任者の情報を表し、次の構造となっています。

リソース

firstname

surname

phone

email

contacts-1.csv

John

Doe

096548763

john.doe@texasComp.com

contacts-2.csv

Jane

Doe

091558780

jane.doe@texasComp.com

データの集約には DataWeave が使用されます。取引先責任者の情報は、両方のリソースからのデータを表す JSON 構造に集約されます。

Anypoint Studio でこのサンプルプロジェクトをダウンロードして開くには、左上隅にある [Exchange] アイコンをクリックします。次に、開いたウィンドウで、Anypoint Exchange にログインし、プロジェクトの名前を検索します。

スロー

  • MULE:ROUTING

  • MULE:COMPOSITE_ROUTING

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub