Scheduler (<scheduler/>)

時間ベースの条件に基づいてフローの実行をトリガーします。たとえば Scheduler によって、5 秒ごと、または指定したタイムゾーンで毎日 12 時 00 分にフロー処理をトリガーするメッセージを作成して送信される場合があります。

Scheduler により、固定の頻度、または Cron 式に基づいた間隔でスケジュール戦略が設定されます。

Mule アプリケーションに Scheduler を追加するときは、次の点を考慮してください。

  • Scheduler は、Mule が動作しているマシンと同じタイムゾーンを使用します。ただし、アプリケーションが CloudHub で動作している場合は、アプリケーションが動作している地理的リージョンに関係なく、Scheduler は UTC タイムゾーンに準拠します。

    Scheduler に別のタイムゾーンを設定するには、​Cron スケジュール戦略属性​の ​timeZone​ を参照してください。

  • disallowConcurrentExecution​ プロパティを使用すると、以前にトリガーされた実行の処理中に Scheduler でフローの実行がトリガーできないようにできます。

  • スケジュールされたトリガー時に利用できるリソースが 1 つもないために ​back-pressure​ が発生した場合、その実行はスキップされます。

  • Mule Runtime Engine クラスターやマルチワーカー CloudHub デプロイメントでは、Scheduler はプライマリノードのみで (つまり 1 つの Mule インスタンスのみで) 実行されます。

コンポーネント XML

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

<scheduler doc:name="Scheduler" doc:id="snswxf" >
  <scheduling-strategy/>
</scheduler>

Scheduler (​<scheduler/>​) 属性は UI および XML で設定できます。

属性名 属性 XML 説明

Scheduler (スケジューラー)​ (デフォルト)

doc:name

キャンバスに表示されるコンポーネントの編集可能な名前。

なし

doc:id

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

Disallow concurrent execution (同時実行を禁止)

disallowConcurrentExecution

この属性を ​true​ に設定すると、Scheduler は前の実行がまだ処理中であればスケジュールされた実行をスキップします。フローが完了すると、Scheduler は次に設定された間隔で実行されます。デフォルト値は ​false​ です。

スケジュール戦略​ (​<scheduling-strategy/>​) は Scheduler の子要素です。

子要素 説明

<scheduling-strategy/>

<fixed-frequency/>​ または ​<cron/>​ 設定を受け入れます。

一定間隔属性

Scheduler では、次の属性を受け入れる一定間隔 (​<fixed-frequency/>​) 要素を受け入れます。

属性名 属性 XML 説明

なし

frequency

指定された ​timeUnit​ 設定で Scheduler がフローをトリガーする頻度。デフォルトは ​1000​ です。

なし

startDelay

アプリケーションが起動した後で Scheduler の最初の実行を遅延する時間。このプロパティでは頻度と同じ ​timeUnit​ を使用します。デフォルトは ​0​ です。

なし

timeUnit

frequency​ と ​startDelay​ の値の次のいずれかの時間単位: MILLISECONDS (ミリ秒)​、​SECONDS (秒)​、​MINUTES (分)​、​HOURS (時)​、または ​DAYS (日)​。デフォルトは ​MILLISECONDS (ミリ秒)​ です。

一定間隔の例​を参照してください。

Cron 属性

より複雑なスケジューリングの場合、​<cron/>​ 要素で Cron 式を設定します。

属性名 属性 XML 説明

なし

expression

Scheduler をトリガーする Cron 式。デフォルトの Cron 式はありません。式の詳細は、​Cron 式​を参照してください。例: expression="1 1 1 1,7 * ?"​。

なし

timeZone

システムプロパティとして渡されるタイムゾーン、またはマシンのオペレーティングシステムで設定されているタイムゾーン。 Java のタイムゾーン​の値がサポートされます。Java の短縮表記 (​PST​ や ​AGT​) は使用せず、Java の完全表記 (​America/Los_Angeles​ など) を使用してください。例: timeZone="America/Argentina/Buenos_Aires"​。

Cron の例​を参照してください。

この例では、一定間隔と 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 はフローが完了までに要する時間が固定の頻度である 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.

次の例は、最初の 10 秒の遅延後、10 秒ごとに Scheduler を実行する一定間隔のスケジュール戦略を示しています。

<scheduler doc:name="Scheduler" >
  <scheduling-strategy >
    <fixed-frequency frequency="10" timeUnit="SECONDS" startDelay="10"/>
  </scheduling-strategy>
</scheduler>

Cron の例

次の例では、15 秒ごとにフローが新たに実行され、Mule メッセージの生成がトリガーされる Cron 式を使用します。

<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>

次の例では、​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 つの必須設定と、年の設定 (省略可能) で構成されます。設定は以下の順序で指定します。

  1. 秒 (​0​-​59​)

  2. 分 (​0​-​59​)

  3. 時 (​0​-​23​)

  4. 日 (​1​-​31​)

  5. 月 (​1​-​12​ または ​JAN​-​DEC​)

  6. 曜日 (​1​-​7​ or ​SUN​-​SAT​)

  7. 年 (空白、または ​1970​-​2099​ の範囲内の 4 桁。例: 2019​)

Scheduler は Quartz Cron 式をサポートします。例をいくつか示します。

動作

1/2 * * * * ?

毎日 2 秒おきに実行。

0 15 10 ? * *

毎日午前 10 時 15 分に実行。 0 15 10 * * ? ` と ​0 15 10 *​`0 15 10 * * ?​ は同じ結果になります。

0 15 10 * * ? 2019

2019 年の毎日午前 10 時 15 分に実行。

0 * 14 * * ?

毎日午後 2 時から 2 時 59 分まで、毎分実行。

0 0/5 14 * * ?

毎日午後 2 時から 2 時 55 分まで、5 分おきに実行。

1 1 1 1,7 * ?

毎月 1 日と 7 日の午前 1 時 1 分 1 秒に実行。

Scheduler コンポーネントは、Quartz Scheduler の特殊文字もサポートします。

  • *​: すべての値。

  • ?​: 任意の 1 つの値。

  • -​: 値の範囲。例: 1-3​。

  • ,​: 追加の値。例: 1,7​。

  • /​: 増分値。例: 1/7​。

  • L​: 週または月の最終日、または月の最後の特定の曜日 (例: 6L​ は月の最後の土曜日)。

  • W​: 平日。月または曜日の項目で有効。

  • #​: 月の "n" 日目。例: #3​ は月の 3 日。

次の例は、「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 式をビルドするための無料のオンラインツールがたくさんあります。

エラー処理

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.

関連情報