Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerFlow スコープと Subflow スコープは、他の一連のコアコンポーネントと操作 (コネクタとモジュールによって提供される) をグループ化するコンポーネントで、インテグレーションプロセスの自動化に役立ちます。Flow コンポーネントは、Mule アプリケーションの基盤です。すべての Mule アプリケーションには少なくとも 1 つのフローを含める必要があるため、Anypoint Studio ではアプリケーション内に最初の Flow コンポーネントが自動的に提供されます。
Mule アプリケーションには、追加のフローとサブフローを含めることができます。次に例を示します。
フローとサブフローの仕様、機能、制限についての詳細は、「フローおよびサブフロー」を参照してください。
フローは常に同期的に機能します。ファイヤアンドフォゲットなどの非同期パターンを実現する必要がある場合は、Async スコープ (<async/>
) を使用できます。
フローは設定可能です。たとえば、Mule アプリケーションの起動時に開始するか停止したままにするかを設定したり、同時に実行できる数を制限したり、ビジネスイベントをセットアップしたりできます。また、コンポーネントのエラー処理をセットアップすることもできます (エラー処理参照)。
項目 | 説明 |
---|---|
Name (名前) ( |
フローの名前。フローには、プロジェクト名と同じ (または部分的に同じ) 編集可能な名前が自動的につけられます。 |
Initial State (初期状態) ( |
値: Started (開始済み)、Stopped (停止済み)。これらは、フローの Mule Runtime 設定です。デフォルトの Started (開始済み) ( 初期状態を Stopped (停止済み) ( |
Max Concurrency (最大同時実行) ( |
省略可能。フローが処理できる同時メッセージの最大数を設定します。設定しない場合、フローがメッセージの処理時にパフォーマンスを最適化するために使用できる最大スレッド数は、コンテナスレッドプールによって異なります。フローが最大数の同時メッセージを処理している間は追加要求を受信できません。 フローが要求を 1 つずつ処理するようにするには、 最大同時実行値に達した後の Mule の動作についての詳細は、「バックプレッシャー」を参照してください。 |
ビジネスイベント |
省略可能。デフォルトは |
メタデータ |
他の多くのコンポーネントと同様に、このコンポーネントのメタデータを設定できます。このトピックについての詳細は、「Metadata Editor (メタデータエディター)」を参照してください。 |
Subflow スコープでは、サブフローの名前を編集し、メタデータを追加できます。フローとは異なり、サブフローにはエラー処理をセットアップするメカニズムは組み込まれていません。ただし、エラー処理を実行する必要がある場合は、サブフロー内の Try スコープによって提供されるエラー処理を使用できます。
項目 | 説明 |
---|---|
Name (名前) ( |
サブフローの名前。サブフローには、プロジェクト名と同じ (または部分的に同じ) 編集可能な名前が自動的につけられます。 |
メタデータ |
他の多くのコンポーネントと同様に、このコンポーネントのメタデータをセットアップできます。このトピックについての詳細は、「Metadata Editor (メタデータエディター)」を参照してください。 |
次の例は、シンプルなフロー (<flow/>
) の XML です。このフローは、10 秒ごとにフローの実行をトリガーするスケジューラーを取得元として使用し、Flow Ref (<flow-ref/>
) コンポーネントを介してサブフロー (<sub-flow/>
) に接続します。そのサブフローも、Flow Ref コンポーネントを使用して別のサブフローに接続します。Studio の UI を使用してコンポーネントを設定すると、Mule アプリケーションの設定 XML に自動的に XML が追加されます。
<flow name="flow_component_ex">
<scheduler doc:name="Scheduler" >
<scheduling-strategy >
<fixed-frequency frequency="10" timeUnit="SECONDS"/>
</scheduling-strategy>
</scheduler>
<ee:transform doc:name="Transform Message">
<ee:message >
<ee:set-payload ><![CDATA[
%dw 2.0
var myXml = read('<prices>
<basic>9.99</basic>
<premium>53</premium>
<vip>398.99</vip>
</prices>', 'application/xml')
output application/xml
---
myXml
]]></ee:set-payload>
</ee:message>
</ee:transform>
<flow-ref name="subflow_ex1"/>
</flow>
<sub-flow name="subflow_ex1">
<ee:transform doc:name="Transform Message">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
import * from dw::util::Timer
output application/json
var conversionRate=13
---
priceList: payload.prices mapObject(value, key, index) -> {
(key) : {
dollars: value,
localCurrency: value * conversionRate,
index_plus_1: index + 1,
timer : currentMilliseconds()
}
}]]>
</ee:set-payload>
</ee:message>
</ee:transform>
<flow-ref name="subflow_ex2"/>
</sub-flow>
<sub-flow name="subflow_ex2">
<logger level="INFO" doc:name="Logger" message="#[payload]" />
</sub-flow>
この例の出力は次のようになります。
{
"priceList": {
"basic": {
"dollars": "9.99",
"localCurrency": 129.87,
"index_plus_1": 1,
"timer": 1533024312658
},
"premium": {
"dollars": "53",
"localCurrency": 689,
"index_plus_1": 2,
"timer": 1533024312659
},
"vip": {
"dollars": "398.99",
"localCurrency": 5186.87,
"index_plus_1": 3,
"timer": 1533024312659
}
}
}
Flow コンポーネントにエラーハンドラーを追加できます (サブフローには追加できません)。
Studio では、Flow コンポーネントの下部にある [Error handling (エラー処理)] 領域を展開し、エラーコンポーネントをフローにドラッグするだけです。このプロセスにより、Error Handler コンポーネントにコンポーネントが自動的に配置されるため、最初に Error Handler コンポーネントを追加する必要はありません。
この XML 例の末尾付近で、フローの On Error Continue (エラー時継続) 設定 (<on-error-continue/>
) があります
<flow name="flow_subflowFlow" >
<scheduler doc:name="Scheduler" >
<scheduling-strategy >
<fixed-frequency frequency="10" timeUnit="SECONDS"/>
</scheduling-strategy>
</scheduler>
<ee:transform doc:name="Transform Message" >
<ee:message >
<ee:set-payload ><![CDATA[
%dw 2.0
var myXml = read('<prices></prices>', 'application/xml')
output application/xml
---
myXml
]]></ee:set-payload>
</ee:message>
</ee:transform>
<logger level="INFO" doc:name="Logger" message='#[payload.prices]'/>
<error-handler >
<on-error-continue enableNotifications="true" logException="true" doc:name="On Error Continue" type="EXPRESSION" when="#[isEmpty(payload.prices)]">
<logger level="ERROR" doc:name="Logger" message='"An Error Occurred"'/>
</on-error-continue>
</error-handler>
</flow>
前の例では、エラーが発生します。次の点を確認してください。
<set-payload/>
の変数 var myXml
は、ペイロードとして空の <prices></prices>
タグを設定します。
<set-payload/>
コンポーネントの横にある Logger は、空のタグの値を記録するように設定されているため、null
を返します。
DataWeave 条件 isEmpty(payload.prices)
が true
を返すため、<on-error-continue/>
コンポーネントはエラーを返します。
<on-error-continue/>
内の Logger (<logger/>
) では、エラーが発生したときにコンソールに出力するエラーメッセージを設定します。結果のエラーメッセージは次のようになります。
ERROR 2018-07-30 23:58:45,293 [[MuleRuntime].cpuLight.06:
[flow_subflow].flow_subflowFlow.CPU_LITE @1b1529b2]
[event: 0-2aba3280-948f-11e8-82d0-f45c898f2549]
org.mule.runtime.core.internal.processor.LoggerMessageProcessor:
"An Error Occurred"
これらのコンポーネントについての詳細は、「On-Error エラーハンドラー」を参照してください。