Flow Reference (<flow-ref/>)

Mule イベントを同じ Mule アプリケーション内で別のフローやサブフローにルーティングし、参照先のフローですべてのプロセッサーを実行してから、イベントを元のフローにルーティングします。

このプロセスにより、参照先のフロー全体を現在のフロー内の 1 つのコンポーネントのように扱うことができます。

Flow Reference によって、Mule アプリケーションを個々の再利用可能な単位に分割できます。たとえば、ファイルをリストすることが多いフローは、List 操作の出力を処理する別のフローを参照できます。ファイルをリストするフローにすべての処理ステップを追加する代わりに、処理フローを参照する Flow Reference を追加できます。

実際のフロー名を使用して ​[Flow name (フロー名)]​ (​name​) 属性を定義してください。動的値 (DataWeave 式、変数) を使用して参照先フローを指定すると、パフォーマンスが低下します。また、MUnit テストおよびアプリケーション分析ツールは動的参照では正常に機能しない可能性があります。

コンポーネント XML

このコンポーネントは、次の XML 構造をサポートします。

<flow-ref name="anotherflow" />

Flow Reference (<flow-ref/>) 属性は UI および XML で設定できます。

属性名 属性 XML 説明

Name (名前)

name

このコンポーネントが参照するフローの名前。

なし

doc:id

コンポーネントの自動生成された識別子。

Target Variable (対象変数)

target

メッセージデータを格納する変数の名前。数字、文字、アンダースコアのみを使用できます。たとえば、名前にハイフンは使用できません。 Mule ドキュメントの Enrich Data with Target Variablesを参照してください。

Target Value (対象値)

targetValue

対象変数に格納するデータの値。このデフォルト値はメッセージペイロード (payload) です。この項目は、変数が受け入れるすべての値を受け入れます。サポートされているデータ型、DataWeave の式、​payload​、​attributes​、​message​ キーワードが該当しますが、​vars​ キーワードは対象外です。 Mule ドキュメントの Enrich Data with Target Variablesを参照してください。

対象変数を使用する場合の考慮事項

Flow Reference コンポーネントで ​target​ 変数を設定すると、元のメッセージは変更されません。つまり、参照先のフローでペイロードや変数が変更されても、参照先のフローでプロセッサーの実行が完了した後は、ペイロードや変数は元の値に戻ります。

一方、​target​ 変数を設定しないと、参照先のフローでペイロードや変数に対して行われた変更は、参照先のフローの実行が完了した後も保持され、ペイロードや変数の元の値が変更されます。

次の例では、HTTP リスナーを設定し、ペイロードを更新し、変数を設定し、対象変数 ​flowReferenceVar​ を追加して別のフローを参照します。この変数は、Flow Reference コンポーネントによってコールされる 2 つ目のフローの結果を格納します。この変数は、​vars.flowReferenceVar​ のログを記録することで、メインフローでも使用されます。

<!-- Main flow -->
<flow name="mainFlow" >
  <http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="test"/>
  <set-payload value="Original payload" doc:name="Set Payload"  />
  <set-variable value="1" doc:name="Set myVar=1" variableName="myVar"/>
  <!-- Flow Reference component with target variable flowReferenceVar -->
  <flow-ref doc:name="secondaryFlow" name="secondaryFlow" target="flowReferenceVar"/>
  <logger level="INFO" doc:name="Log payload" message='#["Payload = " ++ payload]'/>
  <logger level="INFO" doc:name="Log myVar" message='#["myVar = " ++ vars.myVar]'/>
  <logger level="INFO" doc:name="Log flowReferenceVar" message='#["flowReferenceVar = " ++ vars.flowReferenceVar]'/>
</flow>
<!-- Secondary flow that is referenced from Main flow-->
<flow name="secondaryFlow" doc:id="044ece19-aa71-4fc9-ad34-8df655dd59a8" >
  <set-payload value="Modified payload" doc:name="Update Payload" />
  <set-variable value="2" doc:name="Update myVar=2" variableName="myVar"/>
</flow>

次のログは、アプリケーション例の実行後の出力を表しています。

INFO  LoggerMessageProcessor: Payload = Original payload
INFO  LoggerMessageProcessor: myVar =  1
INFO  LoggerMessageProcessor: flowReferenceVar =  Modified payload

Flow Reference コンポーネントから ​target="flowReferenceVar"​ を削除すると、アプリケーションは次の出力を返します。

INFO  LoggerMessageProcessor: Payload = Modified payload
INFO  LoggerMessageProcessor: myVar = 2
INFO  LoggerMessageProcessor: flowReferenceVar = null

ログは、読みやすいように省略されています。

エラー処理

Flow Reference コンポーネントによって参照されているフロー内でエラーが発生すると、参照先フローの実行が停止し、参照先フローのエラーハンドラーに処理が渡されます。参照先フローでエラーハンドラーが設定されていない場合は、Flow Reference コールを含むフローまでエラーが伝播され、このフローで設定されている Error Handler コンポーネントでエラーが処理されます。

エラーが発生した場合は、フローの実行が停止して正常に終了しないため、対象変数は設定されません。