Red Hat Training

A Red Hat training course is available for Red Hat Fuse

第129章 Quartz

Quartz コンポーネント

quartz: コンポーネントは、Quartz スケジューラー 1.x を使用してスケジュールされたメッセージの配信を提供します。各エンドポイントは、異なるタイマー(Quartz 用語、Trigger および JobDetail)を表します。
注記
Quartz 2.x を使用している場合は、Camel 2.12 以降では Quartz2 コンポーネントを使用する必要があります。

URI 形式

quartz://timerName?options
quartz://groupName/timerName?options
quartz://groupName/timerName?cron=expression
quartz://timerName?cron=expression
コンポーネントは CronTrigger または SimpleTrigger のいずれかを使用します。cron 式が指定されていない場合、コンポーネントは単純なトリガーを使用します。groupName が指定されていない場合、quartz コンポーネントは Camel グループ名を使用します。
URI にクエリーオプションは ?option=value&option=value&.. の形式で追加できます。

オプション

パラメーター デフォルト 説明
cron なし cron 式を指定します( trigger.\* または job.\* オプションと互換性がありません)。
trigger.repeatCount 0 SimpleTrigger: タイマーを繰り返す回数はどれくらいですか ?
trigger.repeatInterval 0 SimpleTrigger: 繰り返されるトリガーの間隔(ミリ秒単位)。
job.name null ジョブ名を設定します。
ジョブ。XXX null ジョブオプションを XXX セッター名で設定します。
trigger.XXX null XXX セッター名で trigger オプションを設定します。
stateful false デフォルトのジョブの代わりに Quartz StatefulJob を使用します。
fireNow false Camel 2.2.0: true の場合は、SimpleTrigger の使用時にルートを起動したときにトリガーを実行します。
deleteJob true Camel 2.12: true の場合、ルートが停止するとトリガーが自動的に削除されます。false の場合、スケジューラーは残り、ユーザーは Camel URI で事前設定されたトリガーを再利用できます。名前が一致するだけです。deleteJobtrue の両方を設定することはできません。
pauseJob false Camel 2.12: true の場合、トリガーはルートが停止すると自動的に一時停止します。false の場合、スケジューラーは残り、ユーザーは Camel URI で事前設定されたトリガーを再利用できます。名前が一致するだけです。deleteJobpauseJobtrue の両方に設定することはできない点に注意してください。
usingFixedCamelContextName false Camel 2.15.0: true の場合、JobDataMapCamelContext 名を直接使用して Camel コンテキストを参照します。false の場合は、deployed がデプロイ中に変更される可能性のある管理名を使用します。JobDataMap CamelContext
たとえば、以下のルーティングルールは、mock:results エンドポイントに 2 つのタイマーイベントを実行します。
from("quartz://myGroup/myTimerName?trigger.repeatInterval=2&trigger.repeatCount=1").routeId("myRoute").to("mock:result");
StatefulJob を使用する場合、JobDataMap はジョブが実行されるたびに再永続化されるため、次の実行の状態を保持します。
OSGi での実行と quartz ルートを持つ複数のバンドルがある
Apache ServiceMix や Apache Karaf などの OSGi で を実行し、Quartz エンドポイントから開始する Camel ルートを持つ複数のバンドルがある場合は、OSGi コンテナーの QuartzScheduler で必要となるため、この ID が一意である <camelContext> に ID を割り当てるようにしてください。<camelContext> に id を設定しないと、一意の ID が自動的に割り当てられ、問題はありません。

quartz.properties ファイルの設定

デフォルトでは、Quartz はクラスパスの org/quartz ディレクトリーで quartz.properties ファイルを検索します。WAR デプロイメントを使用している場合は、WEB-INF/classes/org/quartz の quartz.properties をドロップするだけです。
ただし、Camel Quartz コンポーネントでは、プロパティーを設定することもできます。
パラメーター デフォルト タイプ 説明
properties null プロパティー Camel 2.4: java.util.Propoperties インスタンスを設定できます。
propertiesFile null 文字列 Camel 2.4: クラスパスから読み込むプロパティーのファイル名
これには、Spring XML で以下のように設定します。
<bean id="quartz" class="org.apache.camel.component.quartz.QuartzComponent">
    <property name="propertiesFile" value="com/mycompany/myquartz.properties"/>
</bean>

JMX での Quartz スケジューラーの有効化

JMX を有効にするには、quartz スケジューラープロパティーを設定する必要があります。これは通常、org.quartz.scheduler.jmx.export オプションを設定ファイルの true 値に設定します。
Camel 2.13 以降では、明示的に無効にしない限り、Camel はこのオプションを true に自動的に設定します。

Quartz スケジューラーの起動

Camel 2.4 以降で利用可能
Quartz コンポーネントは、Quartz スケジューラーの遅延、または自動起動を行わないオプションを提供します。
パラメーター デフォルト タイプ 説明
startDelayedSeconds 0 int Camel 2.4: quartz スケジューラーを起動するまで待機する秒数。
autoStartScheduler true boolean Camel 2.4: スケジューラーを自動的に起動するかどうか。
これには、Spring XML で以下のように設定します。
<bean id="quartz" class="org.apache.camel.component.quartz.QuartzComponent">
    <property name="startDelayedSeconds" value="5"/>
</bean>

クラスタリング

Camel 2.4 以降で利用可能
クラスターモードで Quartz を使用する場合、JobStore はクラスター化されます。その後、Quartz コンポーネントはノードの停止/シャットダウン時にトリガーを一時停止/削除し ません。これにより、トリガーはクラスター内の他のノードでも実行を継続できます。
注記
クラスター化されたノードで実行されている場合、エンドポイントに対して一意のジョブ名/グループを保証するチェックは行われません。

メッセージヘッダー

Apache Camel は Quartz Execution Context からの getter をヘッダー値として追加します。以下のヘッダー 追加されます: calendarfireTimejobDetailjobInstancejobRuntTimemergedJobDataMapnextFireTimepreviousFireTimerefireCount、Result、scheduledFireTimeschedulertrigger NametriggerGroup
fireTime ヘッダーには、エクスチェンジがいつ実行されたかの java.util.Date が含まれます。

Cron トリガーの使用

Apache Camel 2.0 Quartz の時点では、便利な形式でタイマーを指定する Cron のような式 がサポートされます。これらの式は cron URI パラメーターで使用できますが、有効な URI エンコーディングを保持するには、スペースの代わりに + を使用できます。Quartz では、cron 式の使用方法に関する チュートリアルを少し 紹介します。
たとえば、以下は、毎週 12pm (noon)から 6pm までのメッセージを 5 分ごとに実行します。
from("quartz://myGroup/myTimerName?cron=0+0/5+12-18+?+*+MON-FRI").to("activemq:Totally.Rocks");
これは cron 式の使用と同等です。
0 0/5 12-18 ? * MON-FRI
以下の表は、有効な URI 構文を保持するために使用する URI 文字エンコーディングを示しています。
URI 文字 Cron 文字
\+ スペース

タイムゾーンの指定

Camel 2.8.1 から利用可能です。Quartz Scheduler を使用すると、トリガーごとにタイムゾーンを設定できます。たとえば、国のタイムゾーンを使用するには、以下のように実行できます。
quartz://groupName/timerName?cron=0+0/5+12-18+?+*+MON-FRI&trigger.timeZone=Europe/Stockholm
timeZone 値は、java.util.TimeZone で許可される値です。
Camel 2.8.0 以前のバージョンでは、エンドポイント uri から設定できるようにするには、カスタム 文字列java.util.TimeZone Type Converter に提供する必要があります。Camel 2.8.1 以降では、このような Type Converter が camel-core に含まれています。