2009-07-15 9 views
1

Ich habe eine Camel in Java DSL wie folgt geschrieben Strecke Definition:Wie ändert man Prozessoreigenschaften zur Laufzeit mit Camel?

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

Dies verbindet meine beiden Endpunkte eine Throttler verwendet, die den Nachrichtenfluss zu 200 Nachrichten pro Sekunde begrenzt.

Ich suche nach einer Möglichkeit, die maximaleRequestCount/Sekunde während der Laufzeit zu ändern. Also muss ich irgendwie zu der aufgerufenen Throttler Instanz kommen und die Eigenschaft ändern.

Wie kann ich auf den Throttler zugreifen?

Antwort

1

Ok, dachte ich, es selbst heraus ...

Sie benötigen Throttler Instanz selbst zu definieren.

Throttler throttler = new Throttler(null, 200); 

Dann können Sie es in Ihre Routen wie diese, weil Throttler der Prozessor-Schnittstelle implementiert:

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

Jedes Mal, wenn Sie möchten, können Sie die Eigenschaften des throttler ändern.

+1

Ja alles in der Camel Route kocht auf einen Prozessor, so können Sie tun, was Sie getan haben. Sie können einem Prozessor in der Route .from (myEndpoint) .throttle (200) .id ("myThrottler") eine ID zuweisen. To (myOtherEndpoint); Dann was fehlt derzeit ist ein nettes Nachschlagen Throttler Throttler = context.getProcessorById ("myThrottler", Throttler.class); // dann ändern Sie den Throttler wie Sie möchten. –

+0

Ich habe gerade ein Ticket für eine nette Suche erstellt: CAMEL-2258 –

1

Ja, das ist eine saubere Lösung.

In Camel 2.0 können Sie jetzt die Laufzeitprozessoren in der Route navigieren und so alle Throullers finden und dann dynamisch ändern.

Aber wir arbeiten auch an der Verbesserung der JMX in Camel 2.1, so dass Sie Throttler/Delayer und die Likes von JMX ändern können.

Und vielleicht auch die Navigate API verbessern, so dass Sie in einem einzigen Liner finden können, zB vielleicht nach ID suchen, wenn Sie eine ID in der Route angeben. Oder nach Typen, so können Sie filtern und erhalten nur die Throullers etc.

+0

Das war die Art von Lösung, nach der ich ursprünglich gesucht habe. Aber soweit ich weiß, gibt es keine Möglichkeit, einem Throttler eine "ID" zu geben, um danach zu suchen. In meinen Tests, einfach die Laufzeitprozessoren zu durchlaufen, wurde mein Code extrem mit der Routing-Konfiguration gekoppelt und würde nicht mehr laufen, wenn ich ihn änderte. – arturh

Verwandte Themen