Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerUntil Successful スコープは、内部のプロセッサーがすべて成功するか、またはスコープが最大再試行回数に達するまで、内部のコンポーネントを順番に処理します。 Until Successful は同期的に実行されます。スコープ内のプロセッサーが接続に失敗したり、正常に結果を生成できなかったりした場合、Until Successful では設定されている最大再試行回数まで、失敗したプロセッサーを含めて内部のすべてのプロセッサーをやり直します。再試行が成功すると、スコープは次のコンポーネントに進みます。最後の再試行に失敗すると、Until Successful はエラーをスローします。
例外が発生しない場合、または応答が式に一致する場合、ルーティングは成功です。
Until Successful を使用する一般的な処理は次の通りです。
アウトバウンドエンドポイントへのディスパッチ (可用性に問題があるかも知れないリモート Web サービスを呼び出す場合など)。
コンポーネントメソッドの実行 (信頼性の低いリソースに依存する Spring bean を実行する場合など)。
サブフローを使用した、いくつかのアクションが成功するまでの再試行。
Until Successful スコープを設定するには、<until-successful>
XML 要素をアプリケーションフロー内に追加します。
Until Successful スコープでは次の属性を設定できます。
項目 | XML | 説明 |
---|---|---|
Max Retries (最大再試行回数) |
|
許容される再試行の最大回数を指定します。この属性は、数値、または数値に解決される式にできます。最大回数に達すると、 |
Milliseconds Between Retries (再試行回数間のミリ秒数) |
|
再試行から次の再試行を実行するまでの最小間隔をミリ秒で指定します。実際の間隔は前回の実行によって変わりますが、この数値の 2 倍を超えてはいけません。デフォルト値は 60000 ミリ秒 (1 分) です。この属性は、数値、または数値に解決される式にできます。 |
次の XML の例では、Scheduler コンポーネントによりトリガーされるフローと、FTP Write 操作を実行する Until Successful スコープを設定します。
<!-- FTP Connector config-->
<ftp:config name="FTP_Config" doc:name="FTP Config" >
<ftp:connection workingDir="${ftp.dir}" host="${ftp.host}" />
</ftp:config>
<flow name="untilSuccessfulFlow" >
<!-- Scheduler component to trigger the flow-->
<scheduler doc:name="Scheduler" >
<scheduling-strategy >
<fixed-frequency frequency="15" timeUnit="SECONDS"/>
</scheduling-strategy>
</scheduler>
<!-- Until Successful scope-->
<until-successful maxRetries="5" doc:name="Until Successful" millisBetweenRetries="3000">
<!-- FTP Write operation that executes as part of the Until Successful Scope -->
<ftp:write doc:name="Write" config-ref="FTP_Config" path="/"/>
</until-successful>
<logger level="INFO" doc:name="File upload success" message="File upload success"/>
<!-- Error Handler at flow level-->
<error-handler>
<on-error-continue enableNotifications="true" logException="true" doc:name="On Error Continue" type="RETRY_EXHAUSTED">
<logger level="INFO" doc:name="File upload failed" message="File upload failed"/>
</on-error-continue>
</error-handler>
</flow>
サンプルアプリケーションの動作:
FTP Write 操作が失敗した場合
Until Successful スコープでは、操作が成功するまで 3000
ミリ秒ごとに操作を再試行します。ただし、5
回の再試行回数の制限があります。最後の実行が失敗すると MULE:RETRY_EXHAUSTED
エラーがスローされます。次に、<on-error-continue>
でエラーが処理され、Logger が実行されて、File upload failed
というメッセージが表示されます。
MULE:RETRY_EXHAUSTED
をスローする前に、Mule では、たとえば次のように、Mule イベントでプロセッサーの実行をやり直すために失敗した各試行をログにも記録します。
ERROR 2022-12-09 17:41:44,910 ... event: cdad31c0-782b-11ed-af21-147ddaaf4f97]
...UntilSuccessfulRouter: Retrying execution of event, attempt 1 of 5.
...
ERROR 2022-12-09 17:41:55,079 ... event: cdad31c0-782b-11ed-af21-147ddaaf4f97]
...UntilSuccessfulRouter: Retrying execution of event, attempt 5 of 5.
いずれかの試行で FTP Write 操作の実行が成功した場合
Until Successful スコープの後の次のプロセッサーが実行されます。この事例では、Logger で File upload success
というメッセージが表示されます。