Utilizzo di Apache Camel con Spring

1. Panoramica

Questo articolo dimostrerà come configurare e utilizzare Apache Camel con Spring.

Apache Camel fornisce molti componenti utili che supportano librerie come JPA, Hibernate, FTP, Apache-CXF, AWS-S3 e ovviamente molti altri, il tutto per aiutare l'integrazione dei dati tra due diversi sistemi.

Ad esempio, utilizzando i componenti Hibernate e Apache CXF, è possibile estrarre dati da un database e inviarli a un altro sistema tramite chiamate API REST.

In questo tutorial, esamineremo un semplice esempio di Camel: leggere un file e convertirne il contenuto in maiuscolo e poi di nuovo in minuscolo. Useremo il componente File di Camel e Spring 4.2.

Ecco i dettagli completi dell'esempio:

  1. Leggi il file dalla directory di origine
  2. Converti il ​​contenuto del file in maiuscolo utilizzando un processore personalizzato
  3. Scrive l'output convertito in una directory di destinazione
  4. Converti il ​​contenuto del file in minuscolo utilizzando Camel Translator
  5. Scrive l'output convertito in una directory di destinazione

2. Aggiungi dipendenze

Per utilizzare Apache Camel con Spring, avrai bisogno delle seguenti dipendenze nel tuo file POM:

 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}  

Quindi, abbiamo:

  • camel-core : la principale dipendenza di Apache Camel
  • camel-spring - ci permette di usare Camel with Spring
  • camel-stream - una dipendenza opzionale, che puoi usare (ad esempio) per visualizzare alcuni messaggi sulla console mentre le rotte sono in esecuzione
  • spring-context - la dipendenza Spring standard, richiesta nel nostro caso poiché eseguiremo le rotte Camel in un contesto Spring

3. Contesto del cammello primaverile

Per prima cosa, creeremo il file Spring Config dove definiremo successivamente i nostri percorsi Camel.

Nota come il file contiene tutti gli spazi dei nomi Apache Camel e Spring e le posizioni dello schema richiesti:

Il elemento rappresenta (non sorprende) il contesto Camel, che può essere paragonato a un contesto dell'applicazione Spring. Ora il tuo file di contesto è pronto per iniziare a definire le rotte Camel.

3.1. Percorso in cammello con processore personalizzato

Successivamente scriveremo il nostro primo percorso per convertire il contenuto del file in maiuscolo.

Dobbiamo definire una fonte da cui il percorso leggerà i dati. Può essere un database, un file, una console o un numero qualsiasi di altre origini. Nel nostro caso, sarà file.

Quindi dobbiamo definire il processore dei dati che verranno letti dalla sorgente. Per questo esempio, scriveremo una classe di processore personalizzata. Questa classe sarà un bean Spring che implementerà l'interfaccia standard del processore Camel.

Una volta elaborati i dati, dobbiamo indicare il percorso verso cui indirizzare i dati elaborati. Ancora una volta, questo potrebbe essere uno di un'ampia varietà di output, come un database, un file o la console. Nel nostro caso, lo memorizzeremo in un file.

Per impostare questi passaggi, inclusi input, processore e output, aggiungi la seguente rotta al file di contesto Camel:

Inoltre, dobbiamo definire il bean myFileProcessor :

3.2. Processore maiuscolo personalizzato

Ora dobbiamo creare il file processor personalizzato che abbiamo definito nel nostro bean. Deve implementare l' interfaccia Camel Processor , definendo un unico metodo di processo , che accetta un oggetto Exchange come input. Questo oggetto fornisce i dettagli dei dati dalla sorgente di input.

Il nostro metodo deve leggere il messaggio da Exchange , mettere in maiuscolo il contenuto e quindi reimpostare il nuovo contenuto nell'oggetto Exchange :

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); } }

Questo metodo di processo verrà eseguito per ogni input ricevuto dalla sorgente.

3.3. Processore minuscolo

Ora aggiungeremo un altro output al nostro percorso Camel. Questa volta convertiremo i dati dello stesso file di input in minuscolo. Questa volta, tuttavia, non utilizzeremo un processore personalizzato; useremo la funzione Message Translator di Apache Camel. Questa è la rotta del cammello aggiornata:

     ${body.toLowerCase()}   

4. Esecuzione dell'applicazione

Per poter elaborare le nostre rotte, dobbiamo semplicemente caricare il file di contesto Camel in un contesto dell'applicazione Spring:

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

Una volta che il percorso è stato eseguito con successo, saranno stati creati due file: uno con contenuto in maiuscolo e uno con contenuto in minuscolo.

5. conclusione

Se stai facendo un lavoro di integrazione, Apache Camel può sicuramente semplificare le cose. La libreria fornisce componenti plug-and-play che ti aiuteranno a ridurre il codice boilerplate e concentrarti sulla logica principale dell'elaborazione dei dati.

E se vuoi esplorare i concetti degli Enterprise Integration Patterns in dettaglio, dovresti dare un'occhiata a questo libro scritto da Gregor Hohpe e Bobby Woolf, che concettualizzano gli EIP in modo molto pulito.

L'esempio descritto in questo articolo è disponibile in un progetto su GitHub.