Apache Camel gebruiken met lente

1. Overzicht

Dit artikel laat zien hoe je Apache Camel met Spring configureert en gebruikt.

Apache Camel biedt nogal wat nuttige componenten die bibliotheken ondersteunen, zoals JPA, Hibernate, FTP, Apache-CXF, AWS-S3 en natuurlijk vele andere - allemaal om te helpen bij het integreren van gegevens tussen twee verschillende systemen.

Als u bijvoorbeeld de Hibernate- en Apache CXF-componenten gebruikt, kunt u gegevens uit een database halen en deze via REST API-aanroepen naar een ander systeem sturen.

In deze tutorial zullen we een eenvoudig Camel-voorbeeld bespreken - een bestand lezen en de inhoud ervan converteren naar hoofdletters en dan terug naar kleine letters. We gaan de bestandscomponent van Camel en Spring 4.2 gebruiken.

Hier zijn de volledige details van het voorbeeld:

  1. Lees het bestand uit de brondirectory
  2. Converteer bestandsinhoud naar hoofdletters met behulp van een aangepaste processor
  3. Schrijf geconverteerde uitvoer naar een bestemmingsmap
  4. Converteer bestandsinhoud naar kleine letters met Camel Translator
  5. Schrijf geconverteerde uitvoer naar een bestemmingsmap

2. Afhankelijkheden toevoegen

Om Apache Camel met Spring te gebruiken, heb je de volgende afhankelijkheden in je POM-bestand nodig:

 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} 

Dus we hebben:

  • kameel-kern - de belangrijkste afhankelijkheid voor Apache Camel
  • kameel-lente - stelt ons in staat Camel with Spring te gebruiken
  • kameelstroom - een optionele afhankelijkheid, die u (bijvoorbeeld) kunt gebruiken om enkele berichten op de console weer te geven terwijl routes worden uitgevoerd
  • lente-context - de standaard afhankelijkheid van de lente, vereist in ons geval omdat we kameelroutes gaan uitvoeren in een lentecontext

3. Spring Camel Context

Eerst maken we het Spring Config-bestand waarin we later onze Camel-routes zullen definiëren.

Merk op hoe het bestand alle vereiste Apache Camel- en Spring-naamruimten en schemalocaties bevat:

De element vertegenwoordigt (niet verrassend) de Camel-context, die kan worden vergeleken met een Spring-toepassingscontext. Nu is uw contextbestand klaar om te beginnen met het definiëren van Camel-routes.

3.1. Kamelenroute met aangepaste processor

Vervolgens zullen we onze eerste route schrijven om bestandsinhoud naar hoofdletters te converteren.

We moeten een bron definiëren waaruit de route gegevens zal lezen. Dit kan een database, bestand, console of een aantal andere bronnen zijn. In ons geval zal het file zijn.

Vervolgens moeten we de processor van de gegevens definiëren die van de bron zullen worden gelezen. Voor dit voorbeeld gaan we een aangepaste processorklasse schrijven. Deze klasse zal een Spring bean zijn die de standaard Camel Processor Interface implementeert.

Zodra de gegevens zijn verwerkt, moeten we de route vertellen waarheen de verwerkte gegevens moeten worden geleid. Nogmaals, dit kan een van de vele verschillende uitgangen zijn, zoals een database, bestand of de console. In ons geval gaan we het opslaan in een bestand.

Om deze stappen in te stellen, inclusief de invoer, processor en uitvoer, voegt u de volgende route toe aan het Camel-contextbestand:

Bovendien moeten we de myFileProcessor Boon:

3.2. Aangepaste hoofdletterprocessor

Nu moeten we de aangepaste bestandsprocessor maken die we in onze bean hebben gedefinieerd. Het moet de Camel implementeren Verwerker interface, die een enkele werkwijze methode, waarvoor een Uitwisseling object als input. Dit object biedt de details van de gegevens van de invoerbron.

Onze methode moet het bericht lezen van de Uitwisseling, zet de inhoud in hoofdletters en zet die nieuwe inhoud vervolgens weer in de Uitwisseling voorwerp:

openbare klasse FileProcessor implementeert Processor {openbaar ongeldig proces (Exchange-uitwisseling) gooit Uitzondering {String originalFileContent = (String) exchange.getIn (). getBody (String.class); String upperCaseFileContent = originalFileContent.toUpperCase (); exchange.getIn (). setBody (upperCaseFileContent); }}

Deze procesmethode wordt uitgevoerd voor elke invoer die van de bron wordt ontvangen.

3.3. Processor in kleine letters

Nu zullen we nog een output toevoegen aan onze Camel-route. Deze keer zullen we de gegevens van hetzelfde invoerbestand naar kleine letters converteren. Deze keer zullen we echter geen aangepaste processor gebruiken; we zullen de functie Message Translator van Apache Camel gebruiken. Dit is de bijgewerkte Camel-route:

     $ {body.toLowerCase ()} 

4. Het uitvoeren van de applicatie

Om onze routes te laten verwerken, hoeven we alleen maar het Camel-contextbestand in een Spring-toepassingscontext te laden:

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

Nadat de route met succes is uitgevoerd, zijn er twee bestanden gemaakt: een met inhoud in hoofdletters en een met inhoud in kleine letters.

5. Conclusie

Als je integratiewerk doet, kan Apache Camel dingen zeker gemakkelijker maken. De bibliotheek biedt plug-and-play-componenten waarmee u de standaardcode kunt verminderen en u kunt concentreren op de belangrijkste logica van het verwerken van gegevens.

En als u de concepten van Enterprise Integration Patterns in detail wilt onderzoeken, moet u dit boek eens bekijken dat is geschreven door Gregor Hohpe en en Bobby Woolf, die de EIP's heel netjes opvatten.

Het voorbeeld dat in dit artikel wordt beschreven, is beschikbaar in een project op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found