2009-07-15 8 views
1

私はこのようなJavaのDSLで記述されたCamelルート定義があります。Camelを使用して実行時にプロセッサプロパティを変更するには?

from(myEndpoint) 
.throttle(200) 
.to(myOtherEndpoint); 

これは毎秒200件のメッセージにメッセージフローを制限スロットラーを使用して、私の2つのエンドポイントを接続します。

実行時にmaximumRequestCount /秒を変更する方法を探しています。 だから私は何とかThrottlerインスタンスにアクセスしてプロパティを変更する必要があります。

Throttlerにアクセスするにはどうすればよいですか?

答えて

1

[OK]を、私はあなたのスロットラーのインスタンスを自分で定義する必要があります...自分で

それを考え出しました。スロットラーは、プロセッサインタフェースを実装しているため

Throttler throttler = new Throttler(null, 200); 

次にあなたは、このようなあなたのルートでそれを使用することができます。

from(myEndpoint) 
.process(throttler) 
.to(myOtherEndpoint); 

あなたがスロットラーのプロパティを変更することができます好きな時間。

+1

Camelのルートの中の何かがプロセッサーになってしまいました。 ルート内のプロセッサにidを割り当てることができます。 .from(myEndpoint).throttle(200).id( "myThrottler")。to(myOtherEndpoint); は、その後、現在欠けている何か素敵なルック スロットラーのスロットラー= context.getProcessorById(「myThrottler」、Throttler.class)です。 //スローラを好きなように変更します。 –

+0

いい検索のためのチケットを作成しました:CAMEL-2258 –

1

ええ、それはきちんとした解決策です。

Camel 2.0では、ルート内のランタイムプロセッサをナビゲートして、Throttlersを見つけて動的に変更できるようになりました。

しかし、私たちはCamel 2.1のJMXを改善するために、JMXのスロットル/遅延機能などを変更できるように取り組んでいます。

ナビゲートAPIを改善して、1つのライナーで見つけることができます。たとえば、ルートにIDを指定すると、IDでルックアップすることができます。またはタイプによってフィルタリングしてThrottlersなどしか取得できないようにします。

+0

これは私が最初に探していた解決策でした。しかし、私が知っている限り、それを探すためにスロットルに「ID」を付ける方法はありません。 ランタイムプロセッサを単にトラバースするテストでは、私のコードはルーティング設定と極端に結びついてしまい、変更したときにはもう実行されませんでした。 – arturh

関連する問題