Úvod do Apache Camel

1. Prehľad

V tomto článku budeme predstaviť Camel a preskúmať jeden z jeho hlavných konceptov - smerovanie správ.

Začneme pokrytím týchto základných pojmov a terminológie a potom predstavíme dve hlavné možnosti definovania trás - Java DSL a Spring DSL.

Ukážeme si to tiež na príklade - definovaním cesty, ktorá spotrebúva súbory z jedného priečinka a presúva ich do iného, ​​pričom pred každý názov súboru sa pripája časová pečiatka.

2. O aplikácii Apache Camel

Apache Camel je integračný rámec otvoreného zdroja, ktorý umožňuje jednoduchú a ľahkú integráciu systémov.

Umožňuje koncovým používateľom integrovať rôzne systémy pomocou rovnakého API, poskytuje podporu pre viaceré protokoly a dátové typy, pričom je rozšíriteľný a umožňuje zavádzanie vlastných protokolov.

3. Závislosti Maven

Aby sme mohli používať Camel, musíme najskôr pridať závislosť Maven:

 org.apache.camel ťavie jadro 2.18.0 

Najnovšiu verziu artefaktu ťavy nájdete tu.

3. Jazyk špecifický pre doménu

Trasy a smerovací motor sú centrálnou súčasťou Camelu. Trasy obsahujú tok a logiku integrácie medzi rôznymi systémami.

Za účelom ľahšej a čistejšej definície trás ponúka Camel niekoľko rôznych jazykov špecifických pre doménu (DSL) pre programovacie jazyky ako Java alebo Groovy. Na druhej strane poskytuje aj definovanie trás v XML pomocou Spring DSL.

Používanie Java DSL alebo Spring DSL je väčšinou preferenciou používateľa, pretože väčšina funkcií je k dispozícii v oboch.

Java DSL ponúka trochu viac funkcií, ktoré nie sú podporované v jarnom DSL. Jarná DSL je však niekedy výhodnejšia, pretože XML je možné meniť bez potreby novej kompilácie kódu.

4. Terminológia a architektúra

Poďme teraz diskutovať o základnej terminológii a architektúre Camel.

Najprv sa pozrieme na základné koncepty Camel:

  • Správa obsahuje údaje, ktoré sa prenášajú na trasu. Každá správa má jedinečný identifikátor a je zostavená z tela, hlavičiek a príloh
  • Výmena je kontajner správy a vytvára sa, keď spotrebiteľ prijme správu počas procesu smerovania. Exchange umožňuje rôzne typy interakcie medzi systémami - môže definovať jednosmernú správu alebo správu žiadosť-odpoveď
  • Koncový bod je kanál, prostredníctvom ktorého môže systém prijímať alebo posielať správy. Môže odkazovať na URI webovej služby, URI frontu, súbor, e-mailovú adresu atď
  • Komponent funguje ako továreň na koncový bod. Zjednodušene povedané, komponenty ponúkajú rozhranie k rôznym technológiám využívajúcim rovnaký prístup a syntax. Camel už vo svojich DSL podporuje veľa komponentov pre takmer všetky možné technológie, ale dáva tiež možnosť písania vlastných komponentov
  • procesor je jednoduché rozhranie Java, ktoré sa používa na pridanie vlastnej integračnej logiky k trase. Obsahuje jednu procesu metóda použitá na predformovanie vlastnej obchodnej logiky pre správu prijatú zákazníkom

Na vysokej úrovni je architektúra Camel jednoduchá. CamelContext predstavuje runtime systém Camel a spája rôzne koncepty, ako sú trasy, komponenty alebo koncové body.

A pod tým, procesory zvládajú smerovanie a transformácie medzi koncovými bodmi, zatiaľ čo koncové body integrujú rôzne systémy.

5. Definovanie trasy

Trasy je možné definovať pomocou Java DSL alebo Spring DSL.

Oba štýly ilustrujeme tak, že definujeme cestu, ktorá spotrebúva súbory z jedného priečinka a presunie ich do iného priečinka, pričom pred každý názov súboru pridáme časovú pečiatku.

5.1. Smerovanie pomocou Java DSL

Na definovanie trasy pomocou Java DSL budeme musieť najskôr vytvoriť DefaultCamelContext inštancia. Potom musíme predĺžiť RouteBuilder triedy a implementovať konfigurovať metóda, ktorá bude obsahovať tok trasy:

súkromné ​​statické konečné dlhé DURATION_MILIS = 10 000; private static final String SOURCE_FOLDER = "src / test / source-folder"; private static final String DESTINATION_FOLDER = "src / test / destination-folder"; @Test public void moveFolderContentJavaDSLTest () vyvolá výnimku {CamelContext camelContext = nový DefaultCamelContext (); camelContext.addRoutes (nový RouteBuilder () {@Override public void configure () vyvolá výnimku {from ("file: //" + SOURCE_FOLDER + "? delete = true"). process (new FileProcessor ()). to ("file : // "+ DESTINATION_FOLDER);}}); camelContext.start (); Thread.sleep (DURATION_MILIS); camelContext.stop (); }

The konfigurovať metóda sa dá čítať takto: čítať súbory zo zdrojového priečinka, spracovávať ich pomocou FileProcessor a výsledok odoslať do cieľového priečinka. Nastavenie vymazať = pravda znamená, že súbor bude po úspešnom spracovaní vymazaný zo zdrojového priečinka.

Aby sme mohli spustiť Camel, musíme zavolať začať metóda na CamelContext. Závit. Spánok je vyvolaná, aby mala Camel čas potrebný na presun súborov z jedného priečinka do druhého.

FileProcessor náradie procesor rozhranie a obsahuje jeden procesu metóda, ktorá obsahuje logiku pre úpravu názvov súborov:

public class FileProcessor implementuje Processor {public void process (Exchange exchange) throws Exception {String originalFileName = (String) exchange.getIn (). getHeader (Exchange.FILE_NAME, String.class); Dátum dátum = nový Dátum (); SimpleDateFormat dateFormat = nový SimpleDateFormat ("rrrr-MM-dd HH-mm-ss"); Reťazec changedFileName = dateFormat.format (date) + originalFileName; exchange.getIn (). setHeader (Exchange.FILE_NAME, changedFileName); }}

Aby sme mohli načítať názov súboru, musíme načítať prichádzajúcu správu z ústredne a pristupovať k jej hlavičke. Podobne ako pri zmene názvu súboru musíme aktualizovať hlavičku správy.

5.2. Smerovanie s pružinou DSL

Pri definovaní trasy pomocou Spring DSL používame súbor XML na nastavenie našich trás a procesorov. To nám umožňuje konfigurovať trasy bez použitia kódu pomocou Spring a v konečnom dôsledku nám prináša výhodu úplnej inverzie kontroly.

To bolo už obsiahnuté v existujúcom článku, takže sa zameriame na použitie oboch Spring DSL spolu s Java DSL, čo je bežne preferovaný spôsob definovania trás.

V tomto usporiadaní je CamelContext definovaný v súbore Spring XML pomocou vlastnej syntaxe XML pre Camel, ale bez definície trasy, ako v prípade „čistého“ Spring DSL pomocou XML:

Týmto spôsobom povieme Camel, aby použila FileRouter trieda, ktorá obsahuje definíciu našej trasy v prostredí Java DSL:

public class FileRouter extends RouteBuilder {private static final String SOURCE_FOLDER = "src / test / source-folder"; private static final String DESTINATION_FOLDER = "src / test / destination-folder"; @Override public void configure () vyvolá výnimku {from ("file: //" + SOURCE_FOLDER + "? Delete = true"). Process (new FileProcessor ()). To ("file: //" + DESTINATION_FOLDER); }}

Aby sme to mohli otestovať, musíme vytvoriť inštanciu ClassPathXmlApplicationContext ktoré naložia naše CamelContext na jar:

@Test public void moveFolderContentSpringDSLTest () hodí InterruptedException {ClassPathXmlApplicationContext applicationContext = nový ClassPathXmlApplicationContext ("camel-context.xml"); Thread.sleep (DURATION_MILIS); applicationContext.close (); }

Použitím tohto prístupu získame ďalšiu flexibilitu a výhody poskytované Springom, ako aj všetky možnosti jazyka Java pomocou Java DSL.

6. Záver

V tomto rýchlom článku sme predstavili úvod do Apache Camel a demonštrovali výhody používania Camel na integračné úlohy, ako je smerovanie súborov z jedného priečinka do druhého.

V našom príklade sme videli, že Camel vám umožní zamerať sa na obchodnú logiku a zníži množstvo štandardných kódov.

Kód z tohto článku nájdete na GitHub.


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