Verwendung von Apache Camel mit Spring

Verwenden von Apache Camel mit Spring

1. Überblick

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

Apache Camel bietet eine Reihe nützlicher Komponenten, die Bibliotheken wieJPA,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.

Mit den CXF-Komponenten "Ruhezustand" 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 auf ein einfaches Camel-Beispiel ein: Lesen einer Datei und Konvertieren ihres Inhalts in Großbuchstaben und dann zurück in Kleinbuchstaben. Wir werden CamelsFile component und Spring 4.2 verwenden.

Hier sind die vollständigen Details des Beispiels:

  1. Liest die Datei aus dem Quellverzeichnis

  2. Konvertieren Sie den Dateiinhalt mit einem benutzerdefiniertenProcessor in Großbuchstaben

  3. Schreiben Sie die konvertierte Ausgabe in ein Zielverzeichnis

  4. Konvertieren Sie den Dateiinhalt mitCamel Translator in Kleinbuchstaben

  5. Schreiben Sie die konvertierte Ausgabe in ein Zielverzeichnis

2. Abhängigkeiten hinzufügen

Um Apache Camel mit Spring zu verwenden, 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:

  • camel-core - die Hauptabhängigkeit für Apache Camel

  • camel-spring - ermöglicht die Verwendung von Camel with Spring

  • 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

  • spring-context - die Standard-Spring-Abhängigkeit, die in unserem Fall erforderlich ist, wenn wir Kamelrouten in einem Spring-Kontext ausführen

3. Frühling Kamel 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<camelContext>-Element repräsentiert (nicht überraschend) den Camel-Kontext, der mit einem Spring-Anwendungskontext verglichen werden kann. Jetzt kann Ihre Kontextdatei mit dem Definieren von Kamelrouten beginnen.

3.1. Kamelroute mit benutzerdefiniertem Prozessor

Als Nächstes schreiben wir unsere erste Route zum Konvertieren von Dateiinhalten in Großbuchstaben.

Wir müssen eine Quelle definieren, von der die Route Daten liest. Dies kann eine Datenbank, eine Datei, eine Konsole oder eine beliebige andere Quelle 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 ist eine Spring Bean, die den StandardCamel Processor Interface implementiert.

Sobald die Daten verarbeitet sind, müssen wir den Weg angeben, wohin die verarbeiteten Daten geleitet werden sollen. Dies kann wiederum eine der zahlreichen 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 der Eingabe, des Prozessors und der Ausgabe einzurichten:


     
     
     

Zusätzlich müssen wir die BeanmyFileProcessordefinieren:

3.2. Benutzerdefinierter Großbuchstabenprozessor

Jetzt müssen wir den benutzerdefinierten Dateiprozessor erstellen, den wir in unserer Bean definiert haben. Es muss die Schnittstelle von CamelProcessorimplementieren und eine einzelneprocess-Methode definieren, die einExchange-Objekt als Eingabe verwendet. Dieses Objekt enthält die Details der Daten aus der Eingabequelle.

Unsere Methode muss die Nachricht ausExchange lesen, den Inhalt in Großbuchstaben schreiben und diesen neuen Inhalt dann wieder in das ObjektExchange 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 werdenMessage Translator featurevon 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");

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

5. Fazit

Wenn Sie Integrationsarbeiten durchführen, kann Apache Camel die Dinge definitiv einfacher machen. Die Bibliothek enthält Plug-and-Play-Komponenten, mit deren Hilfe Sie den Code für das Boilerplate reduzieren und sich auf die Hauptlogik der Datenverarbeitung konzentrieren können.

Und wenn Sie die Konzepte vonEnterprise Integration Patternsim Detail untersuchen möchten, sollten Sie sichthis bookansehen, die von Gregor Hohpe und Bobby Woolf geschrieben wurden, die die EIPs sehr sauber konzipieren.

Das in diesem Artikel beschriebene Beispiel ist inproject on GitHub verfügbar.