8.9. Delayer
概要 リンクのコピーリンクがクリップボードにコピーされました!
Delayer は、受信メッセージに 相対的な 遅延を適用できるプロセッサーです。
Java DSL の例 リンクのコピーリンクがクリップボードにコピーされました!
delay()
コマンドを使用して、受信メッセージに 相対的な 遅延 (ミリ秒単位) を追加することができます。たとえば、以下のルートは、すべての受信メッセージを 2 秒遅延します。
from("seda:a").delay(2000).to("mock:result");
from("seda:a").delay(2000).to("mock:result");
あるいは、式を使用して遅延を指定することもできます。
from("seda:a").delay(header("MyDelay")).to("mock:result");
from("seda:a").delay(header("MyDelay")).to("mock:result");
delay()
に続く DSL コマンドは、delay()
のサブ句として解釈されます。そのため、場合によっては end()
コマンドを挿入して、delay() のサブ句を終了する必要があります。たとえば、delay()
が onException()
句の中にある場合、以下のように終了します。
XML 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
以下は、XML DSL で delay を使用した例となります。
カスタム delay の作成 リンクのコピーリンクがクリップボードにコピーされました!
式と Bean を組み合わせて使用して、以下のように遅延を決定することができます。
from("activemq:foo"). delay().expression().method("someBean", "computeDelay"). to("activemq:bar");
from("activemq:foo").
delay().expression().method("someBean", "computeDelay").
to("activemq:bar");
Bean クラスは以下のように定義することができます。
非同期の遅延 リンクのコピーリンクがクリップボードにコピーされました!
Delayer に、ノンブロッキングの非同期遅延 を使用させることができます。これは、Apache Camel がタスクを今後実行するようにスケジュールすることを意味します。このタスクは、ルートの後半部分 (Delayer の後) の処理を担当します。これにより、呼び出し元スレッドはブロックされず、次の受信メッセージに対応することができます。以下に例を示します。
from("activemq:queue:foo") .delay(1000) .asyncDelayed() .to("activemq:aDelayedQueue");
from("activemq:queue:foo")
.delay(1000)
.asyncDelayed()
.to("activemq:aDelayedQueue");
以下のように XML DSL で同じルートを作成できます。
オプション リンクのコピーリンクがクリップボードにコピーされました!
Delayer パターンでは、以下のオプションがサポートされます。
名前 | デフォルト値 | 説明 |
|
| Camel 2.4: 有効にすると、遅延しているメッセージはスケジュールされたスレッドプールを使用して非同期的に実行されます。 |
|
Camel 2.4: | |
|
|
Camel 2.4: |