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:  |