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 で事前設定されたトリガーを再利用できます。名前が一致するだけです。deleteJob と true の両方を設定することはできません。
|
pauseJob
|
false
|
Camel 2.12: true の場合、トリガーはルートが停止すると自動的に一時停止します。false の場合、スケジューラーは残り、ユーザーは Camel URI で事前設定されたトリガーを再利用できます。名前が一致するだけです。deleteJob と pauseJob は true の両方に設定することはできない点に注意してください。
|
usingFixedCamelContextName
|
false
|
Camel 2.15.0: true の場合、JobDataMap は CamelContext 名を直接使用して 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 をヘッダー値として追加します。以下のヘッダー
が
追加されます: calendar
、fireTime
、jobDetail
、jobInstance
、jobRuntTime
、mergedJobDataMap
、nextFireTime
、previousFireTime
、refireCount
、Result、scheduledFireTime
、scheduler
、trigger
Name
、triggerGroup
。
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 に含まれています。