2 Stimmen

Apache Camel: Routing-Informationen völlig unabhängig vom Java-Code halten

Zunächst einmal danke ich den Leuten, die derzeit an der Entwicklung von Camel beteiligt sind, für all die harte Arbeit, die sie geleistet haben.

Ich bin auf der Suche nach einem Design-Rat.

Die Architektur sieht in etwa so aus: Ich habe eine Reihe von Java-Klassen, die, wenn sie instanziiert werden, eine Verbindung zueinander herstellen und Nachrichten mit Apache Camel senden müssen. Die Designvorgaben erfordern, dass ich einen Rahmen schaffe, in dem alle Routing-Informationen, Produzenten, Konsumenten, Endpunkte usw. Teil der camel-context.xml sein sollten.

Eine Person sollte in der Lage sein, eine solche Datei zu modifizieren und die bestehende Route vollständig zu ändern, ohne den Java-Code zur Verfügung zu haben (der Java-Code würde nicht zur Verfügung gestellt werden, sondern nur das kompilierte Jar).

Zum Beispiel in One setup, Bohne A ->Bohne B->Bohne C->Datei->E-Mail. in einem anderen Bohne B->Bohne A->Bohne C->ftp->Datei->E-Mail Wir haben verschiedene Ansätze ausprobiert, aber wenn die ursprüngliche Bean nicht als Java-DSL implementiert ist, wird die Die Nachrichtenrate ist sehr hoch, da camel im ersten Beispiel ständig Bean A und im zweiten Beispiel Bean B aufruft. (sie sind die Quelle).

Bean A und Bean B generieren Nachrichten und sind ereignisgesteuert. Tritt das gewünschte Ereignis ein, senden die Beans eine Benachrichtigung aus.

Meine Transformationen sind sehr einfach und ich benötige die Leistungsfähigkeit der Java-DSL überhaupt nicht. Zusammenfassend habe ich die folgenden Fragen:

1) Wie kann ich unter Berücksichtigung der oben genannten Einschränkungen sicherstellen, dass alle Routing-Informationen, einschließlich der Zieladressen, Teil der Camel-Kontextdatei sind?

2) Gibt es Beispiele, die ich mir ansehen kann, um die Routing-Informationen völlig unabhängig vom Java-Code zu halten?

3) Wie kann ich sicherstellen, dass Camel nicht ständig die ursprüngliche Bean aufruft?

4) Ruft Camel ständig nur die verursachende Bean oder jede Bean auf, an die es & Nachrichten sendet, unabhängig von der Position der Bean in der gesamten Nachrichtenwarteschlange?

Mir sind die Möglichkeiten ausgegangen, dies auf verschiedene Weise einzurichten. Für jede Hilfe wäre ich dankbar.

3voto

Claus Ibsen Punkte 54333

Lesen Sie über das Ausblenden der Middleware auf den Camel Wiki Seiten. Dies ermöglicht es Ihnen, dass Clients eine Schnittstelle zum Senden/Empfangen von Nachrichten verwenden können, ohne Camel zu kennen (es wird überhaupt keine Camel API verwendet).

Noch besser ist es, das Buch Camel in Action zu kaufen und das Kapitel 14 zu lesen, in dem dies behandelt wird. http://www.manning.com/ibsen/

Sparen Sie 41% bei Manning-Büchern: Camel in Aktion oder ActiveMQ in Aktion. Verwenden Sie den Code s2941. Gültig bis 6. Oktober. http://www.manning.com/ibsen/

0voto

Olivier.Roger Punkte 4181

Wenn Sie die Verwendung von ServiceMix von FuseESB in Betracht ziehen, sollten Sie Ihre Routen in zwei Teile aufteilen.

Der erste Teil wäre die Event-Driver-Bean, die die Route auslöst. Sie könnte Nachrichten an den ServiceNMR senden (siehe http://camel.apache.org/nmr.html ).

Der andere Teil wird den Nutzern des Frameworks überlassen, die Spring DSL verwenden. Es würde einfach auf die Nachricht auf dem NMR hören (Push durch die andere Route) und tun, was immer sie wollen mit ihm.

Natürlich kann die Endpunktdefinition mit Hilfe des Servicemix-Konfigurationsdienstes vorgenommen werden (siehe http://camel.apache.org/properties.html#Properties-UsingBlueprintpropertyplaceholderwithCamelroutes )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X