Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerFlow Reference は、Mule イベントを同じ Mule アプリケーション内で別のフローやサブフローにルーティングし、参照先のフローですべてのプロセッサーを実行してから、イベントを元のフローにルーティングします。次の図は、1 つのフローが別のフローを参照したときの処理の順序を示しています。
メインのフローがトリガーされると、Mule イベントは Flow Reference に到達するまでそのフローを実行します。次に、イベントは参照先のフローを最初から最後まで実行し、メインフローに戻ります。
このプロセスにより、参照先のフロー全体を現在のフロー内の 1 つのコンポーネントのように扱うことができます。
このプロセスにより、参照先のフロー全体を現在のフロー内の 1 つのコンポーネントのように扱うことができます。たとえば、ファイルをリストすることが多いフローは、List 操作の出力を処理する別のフローを参照できます。ファイルをリストするフローにすべての処理ステップを追加する代わりに、処理フローを参照する Flow Reference を追加できます。
Flow Reference コンポーネントを設定するには、Anypoint Studio で以下の手順を実行します。
[Mule Palette (Mule パレット)] から、参照先フローへのコールを作成するフロー内のポイントまで Flow Reference コンポーネントをドラッグします。
Flow Reference のプロパティを開いて、参照するフローの名前を [Flow name (フロー名)] に指定します。
実際のフロー名を使用して [Flow name (フロー名)] (name ) 属性を定義してください。動的値 (DataWeave 式、変数) を使用して参照先フローを指定すると、パフォーマンスが低下します。また、MUnit テストおよびアプリケーション分析ツールは動的参照では正常に機能しない可能性があります。
|
現在のペイロードと変数を使用したフローを実行しつつ、プロセスの完了後も Mule メッセージが変更されないようにしたい場合があります。この場合は、対象変数を使用することで、元のメッセージを変更せずに、参照先フローの処理結果を格納できます。
Flow Reference のプロパティで以下の項目を設定することで、Flow Reference コールの結果を対象変数に格納できます。
Target (対象): Flow Reference がメッセージの処理結果を格納するために作成する変数の名前。
Target Value (対象値): 操作の出力に対して評価される式。この評価の結果は、定義された対象変数に保存されます。
Flow Reference コンポーネントによって参照されているフロー内でエラーが発生すると、参照先フローの実行が停止し、参照先フローのエラーハンドラーに処理が渡されます。参照先フローでエラーハンドラーが設定されていない場合は、Flow Reference コールを含むフローまでエラーが伝播され、このフローで設定されている Error Handler コンポーネントでエラーが処理されます。
エラーが発生した場合は、フローの実行が停止して正常に終了しないため、対象変数は設定されません。
次の XML コードは、Flow Reference の設定で作成したプロジェクトを表しており、Flow Reference コンポーネントがコールした 2 つ目のフローの結果を格納するための対象変数 flowReferenceVar,
が追加されています。この変数は、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
ログは、読みやすいように省略されています。