Brug af Apache Camel med Spring

1. Oversigt

Denne artikel vil demonstrere, hvordan du konfigurerer og bruger Apache Camel med Spring.

Apache Camel leverer en masse nyttige komponenter, der understøtter biblioteker som JPA, Hibernate, FTP, Apache-CXF, AWS-S3 og selvfølgelig mange andre - alt sammen for at hjælpe med at integrere data mellem to forskellige systemer.

For eksempel ved hjælp af Hibernate og Apache CXF-komponenterne kan du trække data fra en database og sende dem til et andet system via REST API-opkald.

I denne vejledning gennemgår vi et simpelt kameleksempel - at læse en fil og konvertere dens indhold til store og derefter tilbage til små bogstaver. Vi skal bruge Camels filkomponent og Spring 4.2.

Her er de fulde detaljer i eksemplet:

  1. Læs filen fra kildekataloget
  2. Konverter filindhold til store bogstaver ved hjælp af en brugerdefineret processor
  3. Skriv konverteret output til en destinationsmappe
  4. Konverter filindhold til små bogstaver ved hjælp af Camel Translator
  5. Skriv konverteret output til en destinationsmappe

2. Tilføj afhængigheder

For at bruge Apache Camel med Spring skal du bruge følgende afhængigheder i din POM-fil:

 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} 

Så vi har:

  • kamelkerne - den vigtigste afhængighed for Apache Camel
  • kamelfjeder - gør det muligt for os at bruge Camel with Spring
  • kamelstrøm - en valgfri afhængighed, som du f.eks. Kan bruge til at vise nogle meddelelser på konsollen, mens ruter kører
  • forårskontekst - standardfjedersafhængighed, der kræves i vores tilfælde, da vi skal køre kamelruter i en forårssammenhæng

3. Forårskamelkontekst

Først opretter vi Spring Config-filen, hvor vi senere definerer vores kamelruter.

Læg mærke til, hvordan filen indeholder alle krævede Apache Camel og Spring navneområder og skemaplaceringer:

Det element repræsenterer (ikke overraskende) Camel-konteksten, som kan sammenlignes med en Spring-applikationskontekst. Nu er din kontekstfil klar til at begynde at definere kamelruter.

3.1. Kamelrute med brugerdefineret processor

Dernæst skriver vi vores første rute for at konvertere filindhold til store bogstaver.

Vi er nødt til at definere en kilde, hvorfra ruten læser data. Dette kan være en database, fil, konsol eller et hvilket som helst antal andre kilder. I vores tilfælde vil det være fil.

Derefter skal vi definere processoren for de data, der læses fra kilden. I dette eksempel skal vi skrive en brugerdefineret processorklasse. Denne klasse vil være en fjederbønne, der implementerer standard Camel Processor Interface.

Når dataene er behandlet, skal vi fortælle ruten, hvor de behandlede data skal henvises. Endnu en gang kan dette være en af ​​en lang række output, såsom en database, fil eller konsollen. I vores tilfælde skal vi gemme det i en fil.

For at konfigurere disse trin, inklusive input, processor og output, skal du tilføje følgende rute til Camel-kontekstfilen:

Derudover skal vi definere myFileProcessor bønne:

3.2. Brugerdefineret store bogstaver

Nu skal vi oprette den brugerdefinerede filprocessor, vi definerede i vores bønne. Den skal implementere kamel Processor interface, der definerer en enkelt behandle metode, der tager en Udveksling objekt som input. Dette objekt giver detaljerne om dataene fra inputkilden.

Vores metode skal læse beskeden fra Udveksling, store bogstaver indholdet, og derefter sætte det nye indhold tilbage i Udveksling objekt:

offentlig klasse FileProcessor implementerer Processor {offentlig ugyldig proces (Exchange-udveksling) kaster Undtagelse {String originalFileContent = (String) exchange.getIn (). getBody (String.class); Streng upperCaseFileContent = originalFileContent.toUpperCase (); exchange.getIn (). setBody (upperCaseFileContent); }}

Denne procesmetode udføres for hvert input, der modtages fra kilden.

3.3. Lille bogstavprocessor

Nu vil vi tilføje endnu en output til vores kamelrute. Denne gang konverterer vi den samme inputfils data til små bogstaver. Denne gang bruger vi dog ikke en brugerdefineret processor; vi bruger Apache Camels meddelelsesoversætterfunktion. Dette er den opdaterede kamelrute:

     $ {body.toLowerCase ()} 

4. Kørsel af applikationen

For at få vores ruter behandlet, skal vi blot indlæse Camel-kontekstfilen i en Spring-applikationskontekst:

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

Når ruten er kørt med succes, oprettes to filer: en med store bogstaver og en med små bogstaver.

5. Konklusion

Hvis du laver integrationsarbejde, kan Apache Camel helt sikkert gøre tingene lettere. Biblioteket leverer plug-and-play-komponenter, der hjælper dig med at reducere kedelpladekoden og fokusere på hovedlogikken i databehandling.

Og hvis du vil udforske Enterprise Integration Patterns-koncepterne i detaljer, skal du kigge på denne bog skrevet af Gregor Hohpe og og Bobby Woolf, der konceptualiserer EIP'erne meget rent.

Eksemplet beskrevet i denne artikel er tilgængeligt i et projekt på GitHub.