8.8. Throttler
概要 リンクのコピーリンクがクリップボードにコピーされました!
Throttler は、受信メッセージのフローレートを制限するプロセッサーです。このパターンを使用して、ターゲットエンドポイントがオーバーロードされないように保護することができます。Apache Camel では、throttle()
Java DSL コマンドを使用して Throttler パターンを実装できます。
Java DSL の例 リンクのコピーリンクがクリップボードにコピーされました!
フロー速度を毎秒 100 メッセージに制限するには、以下のようにルートを定義します。
from("seda:a").throttle(100).to("seda:b");
from("seda:a").throttle(100).to("seda:b");
必要な場合は、timePeriodMillis()
DSL コマンドを使用してフローレートを制御する期間をカスタマイズすることができます。たとえば、30000 ミリ秒あたりのフローレートを 3 つのメッセージに制限するには、以下のようにルートを定義します。
from("seda:a").throttle(3).timePeriodMillis(30000).to("mock:result");
from("seda:a").throttle(3).timePeriodMillis(30000).to("mock:result");
XML 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例は、XML で前述のルートを設定する方法を示しています。
期間ごとに最大リクエスト数を動的に変更 リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.8 で利用可能 式を使用しているため、値を実行時に調整できます。たとえば、ヘッダーで値を指定できます。実行時に Camel は式を評価し、結果を java.lang.Long
型に変換します。以下の例では、メッセージのヘッダーを使用して、期間ごとの最大リクエスト数を決定します。ヘッダーがない場合、「Throttler」 は古い値を使用します。そのため、値を変更する場合にのみ、ヘッダーを提供することができます。
非同期の遅延 リンクのコピーリンクがクリップボードにコピーされました!
Throttler は、ノンブロッキングの非同期遅延 を有効にすることができます。これは、Apache Camel がタスクを今後実行するようにスケジュールすることを意味します。このタスクは、ルートの後半部分 (Throttler の後) の処理を担当します。これにより、呼び出し元スレッドはブロックされず、次の受信メッセージに対応することができます。以下に例を示します。
from("seda:a").throttle(100).asyncDelayed().to("seda:b");
from("seda:a").throttle(100).asyncDelayed().to("seda:b");
Camel 2.17 から、Throttler はメッセージのフローを改善するための期間に対し、ローリングウィンドウを使用するようになりました。ただし、Throttler のパフォーマンスが向上されます。
オプション リンクのコピーリンクがクリップボードにコピーされました!
throttle
DSL コマンドは、以下のオプションをサポートします。
名前。 | デフォルト値 | 説明 |
| スロットルする期間毎の最大リクエスト数。このオプションは省略不可で、正の数字を指定する必要があります。XML DSL では、このオプションは Camel 2.8 以降は属性ではなく式を使用して設定されます。 | |
|
|
Throttler が最大で |
|
| Camel 2.4: 有効にすると、遅延しているメッセージはスケジュールされたスレッドプールを使用して非同期的に実行されます。 |
|
Camel 2.4: | |
|
|
Camel 2.4: |