Apache Camel ist eine sehr praktische Regelungsbibliothek mit der Regel, mit der Ereignisse und Informationen aus verschiedenen Quellen verarbeitet werden können. Sie können Nachrichten in verschiedenen Protokollen wie VM, HTTP, FTP, JMS und sogar im Dateisystem übertragen und Ihre Betriebslogik- und Übertragungslogik -Trennung beibehalten, wodurch Sie sich stärker auf den Inhalt der Nachricht konzentrieren können.
In diesem Artikel werde ich eine Java -Sprache Apache Camel Entry -Demonstration bereitstellen.
Erstellen Sie zuerst eine Pom.xml eines Maven -Projekts.
B. .org/2001/xmlschema-instance "XSI: Schemalocation =" http://maven.apache.org/pom/4.0.0http://maven.APache.org/maven- v4_0.xsd "> <MODELVERSISIINISIINISIINISINISIINISINISINISION"> 4.0 . Project.build.sourceEncoding> utf-8 </project.build.SourceEncoding> <camel.version> 2.11.1 </camel.version> </properties> Ency> <gruppe.camel.camel </Groupid> <Ver </gruppen> org> org.apache.camel </GroupID> <Ver </<Stors </<Sporpies> <Stons </GroupID> org.apache ArtifactId> camel-core </artifactid> <version> $ {camel.version} </Version> </abhängig> <depeaponcy> org.slf4j </gruppId> <artTifactid> SLF4J-Simple </artifactid> <version> 1.7 .5 </version> </abhängig> </abhängigkeiten> </project>Hier verwenden wir nur das Paket camel-core.jar, in der Tat viele praktische Komponenten, die Sie verwenden können. Zum Zwecke von Protokolldatensätzen habe ich SLF4J-Simple als Implementierung des Protokolldatensatzes verwendet, damit wir die Ausgabe von der Konsole sehen können.
Als nächstes müssen wir nur eine Routing -Klasse erstellen. Routen werden definiert, wie die Nachricht von einem Ende zum anderen Ende übergeht. Wir erstellen src/main/java/camelcoredemo/timerroutebuilder.java -Dateien, senden jede Sekunde eine Nachricht an den Prozessor und drucken Sie sie einfach aus.
Paket Camelcoremo; von ("time: // Timer1? Periode = 1000") .Process (neuer Prozessor () {public void prozess (Exchange msg) {log.info ("Verarbeitung {}", msg);}});}}Das obige ist das Bedürfnis für dieses Beispiel und kompilieren und rennen jetzt.
BASH> MVN Compilebash> MVN Exec: java -dexec.mainclass = org.apache.camel.main.main -dexec.args = '-r camelcoremoroutebuilder'
Beachten Sie, dass wir hier nicht den Haupteingang der Java -Klasse geschrieben haben.
Kontrolle Camelcontext
Wenn das Kamel gestartet wird, wird ein CamelContext -Objekt erstellt, das viele Informationen zum Ausführen von Kamel enthält und auch die Definition der von uns erstellten Route enthält. Wenn Sie nun über den CamelContext mehr Kontrolle erhalten möchten, müssen Sie Ihren Hauptcode schreiben. Ich bin hier ein einfaches Beispiel.
Paket Camelemo; Statische void main (string [] args) löst Ausnahme aus {neuer Timermain () ); ;Es ist zu sehen, dass wir die vorhandene Timerroutebuilder -Klasse in der Creteroutebuilder () -Methode wiederverwendet haben. Jetzt hat unsere Hauptklasse vollständig kontrolliert, als sie den Camelcontext erstellt, gestartet und gestoppt wurde. Mit dem Kontext (CamelContext) können Sie steuern, wie Camel in globaler und nicht auf der Routenebene konfiguriert werden kann. Der Javadoc -Link enthält alle Setter -Methoden, und Sie können untersuchen, was es tun kann.
Beachten Sie, dass wir in unserer Hauptkategorie auch eine kleine Menge Code bereitstellen müssen. Zunächst müssen wir uns mit dem Problem der eleganten Schließung befassen, daher haben wir eine Java -Schließfunktion hinzugefügt, um die Stop () -Methode des Kontextes aufzurufen. Zweitens müssen wir nach Beginn des Kontextes einen Threadblock hinzufügen. Wenn Sie Ihren Haupt -Thread nach dem Start nicht blockieren, wird er einfach nach dem Start beendet, und es ist nutzlos. Sie werden Camel als Dienst (wie ein Server) ausführen, bis Sie die Strg+C -Taste drücken, um den Prozess zu beenden.
Verbessern Sie die Hauptklasse, die den Camelcontext startet
Wenn Sie den Code der Hauptklasseneinstellungen nicht so stark verarbeiten möchten, können Sie einfach den org.apache erben. Durch die Verwendung dieser Klasse können Sie Ihren Kontext nicht nur automatisch einstellen, sondern auch alle zusätzlichen Befehlszeileneigenschaften erhalten, z.
Rekonstruieren Sie das folgende Beispiel: Der Code lautet wie folgt:
Paket Caredemo; Statische void main (string [] args) löst Ausnahme aus {Timermain2 main = new Timermain2 (); ;}} Jetzt ist der Code von Timermain2 geringer als zuvor. Sie können es versuchen, er sollte mit den vorherigen Funktionen übereinstimmen.
BASH> MVN Compilebash> MVN Exec: java -dexec.mainclass = camelcoremo.timermain2 -dexec.args = '-t'
Beachten Sie, dass die Routenverfolgung nach dem Geben der Option -t reserviert wird. Verwenden Sie -h werden alle verfügbaren Optionen angezeigt.
Fügen Sie Bean mit dem Registrierungsmechanismus von Camel hinzu
Im vorherigen Timerroutebuilder -Beispiel haben wir im Code einen anonymen Prozessbereich erstellt. Wenn Sie nun ein paar verschiedene Prozessprüfungen zusammenstellen möchten, verringert das Hinzufügen einer Bohne zum Hinzufügen eines Kamelregistrierungsmechanismus die Code -Verwirrung besser. Mit Camel können Sie die Verarbeitung als Bean in seinen Registrierungsraum verwenden, und dann müssen Sie sie nur als Bohnenkomponenten aufrufen. Das Folgende ist mein Rekonstruktionscode:
Paket Caredemo; Statische void main (string [] args) löst Ausnahme aus {TimerBeansMain main = new TimerBeansMain (); ()); = 1000 ") .to (" Bean: processByBean1 ") .to (" Bean: processAgainbyBean2 "); entcs processor {public void prozess (the Exchange msg) {log.info (" erster Prozess {} ", msg);}}}} Static Class bean2 implementiert Prozessor {public void prozess (the Exchange msg) {log.info ("Sec ond Process {}", msg);}}}Jetzt ist die Routenklasse prägnanter und klarer, und gleichzeitig wurde der Verarbeitungscode auch in eine unabhängige Klasse rekonstruiert. Wenn Sie eine sehr komplizierte Route schreiben müssen, um eine Geschäftslogik zu erreichen, kann diese Methode Ihnen helfen, Ihren Code besser zu organisieren und zu testen. Es ermöglicht Ihnen, Pojo -Bean zu bauen, die wie "LEGO" wiederverwendet werden können. Der Registrierungsraum von Camel kann auch für viele andere Verwendungen verwendet werden.
Das obige Routenbeispiel besteht aus der sogenannten Java -DSL.
Ich hoffe, dieser Artikel kann Ihnen helfen, die Erkundungsstufe des Kamels zu überspringen.