スケジューラーエンドポイント (トリガー)

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 フローの最初のコンポーネントです。

Mule フローの Scheduler コンポーネント

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

disallowConcurrentExecution

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

次の例では、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 デフォルト 説明

Frequency (頻度)

frequency

1000

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

Start Delay (開始遅延)

startDelay

0

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

Time Unit (時間単位)

timeUnit

MILLISECONDS

frequency​ と ​startDelay​ の値の次のいずれかの時間単位。

MILLISECONDS (ミリ秒)​、​SECONDS (秒)​、​MINUTES (分)​、​HOURS (時)​、または ​DAYS (日)

次の戦略では、最初の 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 (式)

expression

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

Time Zone (タイムゾーン)

timeZone

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

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

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 からプロジェクトをダウンロードして開くには、Exchange からの Mule プロジェクトのインポート を参照してください。

Anypoint Studio でのデバッグ

Anypoint Studio の​デバッグモード​では、Mule アプリケーションはイベントをトリガーできません。デバッグ時に、たとえば次のようにコンポーネントの下に表示される Studio の緑色の矢印アイコンをクリックすることで Scheduler を手動実行できます。

Scheduler での [Debug (デバッグ) 矢印]