Scheduler コンポーネントは、時間ベースの条件に基づいてフローの実行をトリガーする Mule イベントソースです。たとえば Scheduler によって、5 秒ごと、または指定したタイムゾーンで毎日 12 時 00 分にフロー処理をトリガーするメッセージを作成して送信される場合があります。
Mule アプリケーションに Scheduler を追加するときは次の点を考慮してください。
-
Scheduler は、Mule が動作しているマシンと同じタイムゾーンを使用します。ただし、アプリケーションが CloudHub で動作している場合は、アプリケーションが動作している地理的リージョンに関係なく、Scheduler は UTC タイムゾーンに準拠します。
Scheduler 用に別のタイムゾーンを設定する場合は、Cron (
<cron/>)の「timeZone」を参照してください。 -
disallowConcurrentExecution プロパティを使用すると、以前にトリガーされた実行の処理中に Scheduler でフローの実行がトリガーできないようにできます。 -
スケジュールされたトリガー時に利用できるリソースが 1 つもないために back-pressure が発生した場合、その実行はスキップされます。
-
Mule Runtime Engine クラスターやマルチワーカー CloudHub デプロイメントでは、Scheduler はプライマリノードのみで (つまり 1 つの Mule インスタンスのみで) 実行されます。
アーキテクチャ
他の Mule イベントソースコンポーネントと同様、Scheduler は Mule フローの最初のコンポーネントです。
Scheduler の XML は以下の要素で構成されます。
-
<scheduler />: Scheduler の最上位レベルの要素。 -
<scheduling-strategy />: 次のいずれかの子を受け入れる第 2 レベル要素。-
<fixed-frequency />: 毎秒などの一般的なスケジュール頻度向け。 -
<cron />: Cron 式およびタイムゾーン設定向け。
-
Scheduler により、固定の頻度、または Cron 式に基づいた間隔でスケジュール戦略が設定されます。次に例を示します。
-
次の Scheduler の固定の頻度設定では、15 秒ごとに実行されます。
<flow name="ex-fixed-frequency-flow" > <scheduler doc:name="Scheduler"> <scheduling-strategy> <fixed-frequency frequency="15" timeUnit="SECONDS" /> </scheduling-strategy> </scheduler> <!-- One or more processors here. --> </flow> -
Scheduler の Cron 式によって 15 秒ごとにフローが新たに実行され、Mule メッセージの生成がトリガーされます。
<flow name="ex-cron-expression-flow" > <scheduler doc:name="Scheduler" > <scheduling-strategy > <cron expression='0/15 * * * * ? '/> </scheduling-strategy> </scheduler> <!-- One or more processors here. --> </flow>
1 つ以上のプロセッサーが Scheduler に従う必要があります。プロセッサーには、HTTP Request 操作や Transform Message コンポーネントなど、Mule コンポーネントやコネクタ操作が含まれます。プロセッサーを提供しない場合、MuleRuntimeException が発生し、Mule アプリケーションのデプロイメントが失敗して、次の ERROR メッセージがログに記録されます (読みやすいように編集済み)。
ERROR ...MuleRuntimeException ...
The content of element 'flow' is not complete.
One of '{"http://www.mulesoft.org/schema/mule/core":abstract-message-processor,
"http://www.mulesoft.org/schema/mule/core":abstract-mixed-content-message-processor}'
is expected.
Scheduler 属性については、参照を参照してください。
参照
Scheduler 要素は実行間隔および同時実行を設定するための属性を受け入れます。
Scheduler (<scheduler/>)
デフォルトでは、Scheduler は設定されたケイデンスでフローの別のインスタンスを実行する前にそのフローの前の実行が完了するまで待機しません。この動作は、設定 XML で disallowConcurrentExecution="true" 属性を設定することで変更できます。
| 属性 XML | 説明 |
|---|---|
|
この属性を |
次の例では、Scheduler はフローが完了までに要する時間が固定の頻度である 10 ミリ秒を超えると実行をスキップします。
<flow name="scheduler-disallowConcurrentExecution-ex" >
<scheduler doc:name="Scheduler" disallowConcurrentExecution="true" >
<scheduling-strategy>
<fixed-frequency frequency="10" timeUnit="MILLISECONDS"/>
</scheduling-strategy>
</scheduler>
<!-- processors here -->
</flow>
Scheduler が実行をスキップするたびに、たとえば次のような Execution skipped メッセージがログに記録されます (読みやすいように編集済み)。
INFO 2022-11-09 15:15:43,082 ...
...scheduler.DefaultSchedulerMessageSource:
Flow 'scheduler-disallowConcurrentExecution-ex' is already running and
'disallowConcurrentExecution' is set to 'true'. Execution skipped.
INFO 2022-11-09 15:15:43,083 ...
...scheduler.DefaultSchedulerMessageSource:
Flow 'scheduler-disallowConcurrentExecution-ex' is already running and
'disallowConcurrentExecution' is set to 'true'. Execution skipped.
固定頻度 (<fixed-frequency/>)
固定頻度のスケジュール戦略では、次の属性を受け入れます。
| 属性 | XML | Default (デフォルト) | 説明 |
|---|---|---|---|
Frequency (頻度) |
|
|
指定された |
Start Delay (開始遅延) |
|
|
アプリケーションが起動した後で Scheduler の最初の実行を遅延する時間。このプロパティでは頻度と同じ |
Time Unit (時間単位) |
|
|
|
次の戦略では、最初の 10 秒の遅延後、10 秒ごとに Scheduler の実行を遅延します。
<scheduler doc:name="Scheduler" >
<scheduling-strategy >
<fixed-frequency frequency="10" timeUnit="SECONDS" startDelay="10"/>
</scheduling-strategy>
</scheduler>
Cron (<cron/>)
Cron 式を使用することで、より複雑なスケジューリング戦略を設定できます。
| 属性 | XML | 説明 |
|---|---|---|
Expression (式) |
|
Scheduler をトリガーする Cron 式。デフォルトの Cron 式はありません。式の詳細は、Cron 式を参照してください。例: |
Time Zone (タイムゾーン) |
|
システムプロパティとして渡されるタイムゾーン、またはマシンのオペレーティングシステムで設定されているタイムゾーン。 Java のタイムゾーンの値がサポートされます。Java の短縮表記 ( |
次の例では、America/Los_Angeles タイムゾーンで毎日 12 時 00 分にフローをトリガーする Cron 式を使用します。
<flow name="componentsFlow">
<scheduler>
<scheduling-strategy>
<cron expression="0 0 12 * * ?" timeZone="America/Los_Angeles"/>
</scheduling-strategy>
</scheduler>
<logger message="my message"/>
</flow>
Cron 式
Cron は、日時情報を記述するのに広く利用されている標準です。Cron 式 (<cron expression /> スケジュール戦略 (<scheduling-strategy >) は、固定頻度スケジュール戦略では不可能な間隔でフローをトリガーする場合に便利です。
Scheduler は、毎秒を監視し、Quartz Cron 式が日時の設定と一致すると Mule イベントを作成します。イベントは 1 回だけ、または一定間隔でトリガーできます。
日時の式は、6 つの必須設定と、年の設定 (省略可能) で構成されます。設定は以下の順序で指定します。
-
秒 (
0-59) -
分 (
0-59) -
時 (
0-23) -
日 (
1-31) -
月 (
1-12 または JAN-DEC) -
曜日 (
1-7 or SUN-SAT) -
年 (空白、または
1970-2099 の範囲内の 4 桁。例:2019)
Scheduler は Quartz Cron 式をサポートします。例をいくつか示します。
| 式 | 動作 |
|---|---|
|
毎日 2 秒おきに実行。 |
|
毎日午前 10 時 15 分に実行。 |
|
2019 年の毎日午前 10 時 15 分に実行。 |
|
毎日午後 2 時から 2 時 59 分まで、毎分実行。 |
|
毎日午後 2 時から 2 時 55 分まで、5 分おきに実行。 |
|
毎月 1 日と 7 日の午前 1 時 1 分 1 秒に実行。 |
Scheduler コンポーネントは、Quartz Scheduler の特殊文字もサポートします。
-
*: すべての値。 -
?: 任意の 1 つの値。 -
-: 値の範囲。例:1-3。 -
,: 追加の値。例:1,7。 -
/: 増分値。例:1/7。 -
L: 週または月の最終日、または月の最後の特定の曜日 (例:6L は月の最後の土曜日)。 -
W: 平日。日付項目で有効で、特定の日付以降になります。例:15W はその月の 15 日に最も近い平日を表します。 -
#: 月の "n" 日目。例:#3 は月の 3 日。
詳細は、 「CronExpression」を参照してください。
次の例は、「hello」というメッセージを毎秒ログに記録します。
<flow name="cronFlow" >
<scheduler doc:name="Scheduler" >
<scheduling-strategy >
<cron expression="* * * * * ?" />
</scheduling-strategy>
</scheduler>
<logger level="INFO" doc:name="Logger" message='"hello"'/>
</flow>
Cron 式をビルドするための無料のオンラインツールがたくさんあります。
Anypoint Exchange での例
Anypoint Exchange での次の例は、Scheduler コンポーネントのユースケースを示しています。
-
Data Sync Using Watermarking and Batch (ウォーターマークとバッチを使用したデータの同期)
-
Import Contacts into Microsoft Dynamics CRM (Microsoft Dynamics CRM への取引先責任者のインポート)
-
Import Leads into Salesforce (Salesforce へのリードのインポート)
-
Importing a CSV File into mongoDB (mongoDB への CSV ファイルのインポート)
-
Importing an Email Attachment Using the IMAP Connector (IMAP Connector を使用したメールの添付ファイルのインポート)
-
Salesforce to MySQL Database Using Batch Processing (バッチ処理を使用した Salesforce から MySQL データベースへのインポート)
-
Sending a CSV File Through Email Using SMTP (SMTP を使用したメールでの CSV ファイルの送信)
Anypoint Studio からプロジェクトをダウンロードして開くには、Import a Mule Project from Exchange を参照してください。
Anypoint Studio でのデバッグ
Anypoint Studio のデバッグモードでは、Mule アプリケーションはイベントをトリガーできません。デバッグ時に、たとえば次のようにコンポーネントの下に表示される Studio の緑色の矢印アイコンをクリックすることで Scheduler を手動実行できます。
