Verwenden von Apache Camel mit Spring

1. Übersicht

Dieser Artikel zeigt, wie Sie Apache Camel mit Spring konfigurieren und verwenden.

Apache Camel bietet eine Reihe nützlicher Komponenten, die Bibliotheken wie JPA, Hibernate, FTP, Apache-CXF, AWS-S3 und natürlich viele andere unterstützen, um die Integration von Daten zwischen zwei verschiedenen Systemen zu unterstützen.

Mithilfe der CXF-Komponenten Hibernate und Apache können Sie beispielsweise Daten aus einer Datenbank abrufen und über REST-API-Aufrufe an ein anderes System senden.

In diesem Tutorial gehen wir ein einfaches Camel-Beispiel durch - Lesen einer Datei und Konvertieren ihres Inhalts in Großbuchstaben und dann zurück in Kleinbuchstaben. Wir werden die Dateikomponente von Camel und Spring 4.2 verwenden.

Hier sind die vollständigen Details des Beispiels:

  1. Datei aus dem Quellverzeichnis lesen
  2. Konvertieren Sie Dateiinhalte mit einem benutzerdefinierten Prozessor in Großbuchstaben
  3. Schreiben Sie die konvertierte Ausgabe in ein Zielverzeichnis
  4. Konvertieren Sie Dateiinhalte mit Camel Translator in Kleinbuchstaben
  5. Schreiben Sie die konvertierte Ausgabe in ein Zielverzeichnis

2. Fügen Sie Abhängigkeiten hinzu

Um Apache Camel mit Spring verwenden zu können, benötigen Sie die folgenden Abhängigkeiten in Ihrer POM-Datei:

 2.16.1 4.2.4.RELEASE    org.apache.camel camel-core ${env.camel.version}   org.apache.camel camel-spring ${env.camel.version}   org.apache.camel camel-stream ${env.camel.version}   org.springframework spring-context ${env.spring.version}  

Also haben wir:

  • Kamelkern - die Hauptabhängigkeit für Apache Camel
  • Kamelfeder - ermöglicht es uns, Kamel mit Feder zu verwenden
  • camel-stream - eine optionale Abhängigkeit, mit der Sie (zum Beispiel) einige Nachrichten auf der Konsole anzeigen können, während Routen ausgeführt werden
  • Frühlingskontext - die Standard-Frühlingsabhängigkeit, die in unserem Fall erforderlich ist, wenn wir Kamelrouten in einem Frühlingskontext ausführen

3. Spring Camel Kontext

Zuerst erstellen wir die Spring Config-Datei, in der wir später unsere Kamelrouten definieren.

Beachten Sie, wie die Datei alle erforderlichen Apache Camel- und Spring-Namespaces und Schema-Speicherorte enthält:

Das element repräsentiert (nicht überraschend) den Camel-Kontext, der mit einem Spring-Anwendungskontext verglichen werden kann. Jetzt kann Ihre Kontextdatei mit der Definition von Kamelrouten beginnen.

3.1. Kamelroute mit benutzerdefiniertem Prozessor

Als nächstes schreiben wir unsere erste Route, um Dateiinhalte in Großbuchstaben umzuwandeln.

Wir müssen eine Quelle definieren, aus der die Route Daten liest. Dies kann eine Datenbank, eine Datei, eine Konsole oder eine beliebige Anzahl anderer Quellen sein. In unserem Fall wird es Datei sein.

Dann müssen wir den Prozessor der Daten definieren, die aus der Quelle gelesen werden. In diesem Beispiel schreiben wir eine benutzerdefinierte Prozessorklasse. Diese Klasse wird eine Spring Bean sein, die die Standardschnittstelle für Kamelprozessoren implementiert.

Sobald die Daten verarbeitet sind, müssen wir den Weg angeben, wohin die verarbeiteten Daten geleitet werden sollen. Dies kann wiederum eine von einer Vielzahl von Ausgaben sein, z. B. eine Datenbank, eine Datei oder die Konsole. In unserem Fall werden wir es in einer Datei speichern.

Fügen Sie der Camel-Kontextdatei die folgende Route hinzu, um diese Schritte einschließlich Eingabe, Prozessor und Ausgabe einzurichten:

Zusätzlich müssen wir die myFileProcessor- Bean definieren :

3.2. Benutzerdefinierter Großbuchstabenprozessor

Jetzt müssen wir den benutzerdefinierten Dateiprozessor erstellen, den wir in unserer Bean definiert haben. Es muss die Camel Processor- Schnittstelle implementieren und eine einzelne Prozessmethode definieren , die ein Exchange- Objekt als Eingabe verwendet. Dieses Objekt enthält die Details der Daten aus der Eingabequelle.

Unsere Methode muss die Nachricht aus Exchange lesen , den Inhalt in Großbuchstaben schreiben und diesen neuen Inhalt dann wieder in das Exchange- Objekt setzen:

public class FileProcessor implements Processor { public void process(Exchange exchange) throws Exception { String originalFileContent = (String) exchange.getIn().getBody(String.class); String upperCaseFileContent = originalFileContent.toUpperCase(); exchange.getIn().setBody(upperCaseFileContent); } }

Diese Prozessmethode wird für jede von der Quelle empfangene Eingabe ausgeführt.

3.3. Kleinbuchstabenprozessor

Jetzt werden wir unserer Kamelroute eine weitere Ausgabe hinzufügen. Dieses Mal konvertieren wir die Daten derselben Eingabedatei in Kleinbuchstaben. Dieses Mal verwenden wir jedoch keinen benutzerdefinierten Prozessor. Wir werden die Nachrichtenübersetzer-Funktion von Apache Camel verwenden. Dies ist die aktualisierte Kamelroute:

     ${body.toLowerCase()}   

4. Ausführen der Anwendung

Damit unsere Routen verarbeitet werden können, müssen wir lediglich die Camel-Kontextdatei in einen Spring-Anwendungskontext laden:

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("camel-context.xml"); 

Sobald die Route erfolgreich ausgeführt wurde, wurden zwei Dateien erstellt: eine mit Großbuchstaben und eine mit Kleinbuchstaben.

5. Schlussfolgerung

Wenn Sie Integrationsarbeit leisten, kann Apache Camel die Dinge definitiv einfacher machen. Die Bibliothek bietet Plug-and-Play-Komponenten, mit denen Sie den Code auf dem Boilerplate reduzieren und sich auf die Hauptlogik der Datenverarbeitung konzentrieren können.

Wenn Sie die Konzepte von Enterprise Integration Patterns im Detail untersuchen möchten, sollten Sie sich dieses Buch ansehen, das von Gregor Hohpe und Bobby Woolf verfasst wurde, die die EIPs sehr sauber konzipieren.

Das in diesem Artikel beschriebene Beispiel ist in einem Projekt auf GitHub verfügbar.