Bevezetés az Apache tevébe

1. Áttekintés

Ebben a cikkben meg fogjuk tenni mutassa be a Camelt, és fedezze fel az egyik alapvető fogalmat - az üzenet továbbítását.

Kezdjük ezen alapfogalmak és terminológia áttekintésével, majd az útvonalak meghatározásának két fő lehetőségét mutatjuk be - Java DSL és Spring DSL.

Ezeket egy példán is bemutatjuk - meghatározva egy útvonalat, amely az egyik mappából felemészti a fájlokat és áthelyezi őket a másikba, miközben minden fájlnévhez időbélyeget készít.

2. Az Apache Camelről

Az Apache Camel egy nyílt forráskódú integrációs keretrendszer, amelynek célja a rendszerek egyszerű és egyszerű integrálása.

Lehetővé teszi a végfelhasználók számára, hogy ugyanazokat az API-kat használva integrálják a különféle rendszereket, több protokoll és adattípus támogatását nyújtva, miközben kibővíthetőek és lehetővé teszik az egyedi protokollok bevezetését.

3. Maven-függőségek

A Camel használatához először hozzá kell adnunk a Maven-függőséget:

 org.apache.camel teve-core 2.18.0 

A teve-műtárgy legújabb verziója itt található.

3. Tartomány-specifikus nyelv

Az útvonalak és az útválasztó motor a teve központi része. Az útvonalak tartalmazzák a különböző rendszerek közötti integráció folyamatát és logikáját.

Az útvonalak könnyebb és tisztább meghatározása érdekében a Camel számos különböző tartományspecifikus nyelvet (DSL) kínál a programozási nyelvek számára, mint például a Java vagy a Groovy. Másrészről az XML-ben meghatározza az útvonalakat a Spring DSL segítségével.

A Java DSL vagy a Spring DSL használata többnyire a felhasználók preferenciája, mivel a legtöbb szolgáltatás mindkét esetben elérhető.

A Java DSL egy kicsit több olyan funkciót kínál, amelyeket a tavaszi DSL nem támogat. A tavaszi DSL azonban néha előnyösebb, mivel az XML megváltoztatható a kód újrafordítása nélkül.

4. Terminológia és építészet

Most tárgyaljuk meg a teve alapvető terminológiáját és architektúráját.

Először itt nézzük meg a teve alapvető koncepcióit:

  • Üzenet útvonalra továbbított adatokat tartalmaz. Minden üzenet egyedi azonosítóval rendelkezik, és törzsből, fejlécekből és mellékletekből épül fel
  • Csere az üzenet tárolója, és akkor jön létre, amikor egy üzenetet a fogyasztó fogad az útválasztási folyamat során. Az Exchange különböző típusú interakciókat tesz lehetővé a rendszerek között - meghatározhat egyirányú üzenetet vagy egy kérés-válasz üzenetet
  • Végpont olyan csatorna, amelyen keresztül a rendszer üzenetet fogadhat vagy küldhet. Hivatkozhat webszolgáltatás URI-ra, várólista URI-ra, fájlra, e-mail címre stb
  • Összetevő végpontgyárként működik. Leegyszerűsítve: az alkatrészek interfészt kínálnak a különböző technológiákhoz, azonos megközelítést és szintaxist használva. A Camel már sok komponenst támogat DSL-jében szinte minden lehetséges technológiához, de lehetőséget ad egyedi komponensek írására is
  • Processzor egy egyszerű Java felület, amelyet egyedi integrációs logika hozzáadásához használnak az útvonalhoz. Egyetlenet tartalmaz folyamat a fogyasztó által kapott üzenet egyéni üzleti logikájának előformázására használt módszer

Magas szinten a teve felépítése egyszerű. CamelContext a Camel futásidejű rendszert képviseli, és különböző fogalmakat vezet, például útvonalakat, összetevőket vagy végpontokat.

Ez alatt pedig a processzorok kezelik a végpontok közötti útválasztást és transzformációkat, míg a végpontok különböző rendszereket integrálnak.

5. Útvonal meghatározása

Az útvonalak meghatározhatók Java DSL vagy Spring DSL használatával.

Mindkét stílust illusztráljuk egy útvonal meghatározásával, amely egy mappa fájljait emészti fel, és egy másik mappába helyezi át őket, miközben az egyes fájlnevekhez előbélyegzőt készít.

5.1. Útválasztás Java DSL-lel

Útvonal definiálásához a Java DSL használatával először létre kell hoznunk a DefaultCamelContext példa. Ezt követően ki kell terjesztenünk RouteBuilder osztály és végrehajtja a Beállítás módszer, amely tartalmazza az útvonal áramlását:

privát statikus végső hosszú DURATION_MILIS = 10000; privát statikus végső karakterlánc SOURCE_FOLDER = "src / test / source-folder"; privát statikus végső karakterlánc DESTINATION_FOLDER = "src / test / destination-folder"; @Test public void moveFolderContentJavaDSLTest () dobja a Kivételt {CamelContext camelContext = new DefaultCamelContext (); camelContext.addRoutes (new RouteBuilder () {@Orride public void configure () dobja a (z) "Kivételt {from (" file: // "+ SOURCE_FOLDER +"? delete = true "). process (new FileProcessor ()) to (" file " : // "+ DESTINATION_FOLDER);}}); teveContext.start (); Szál.alszik (DURATION_MILIS); teveContext.stop (); }

A Beállítás metódus így olvasható: olvassa el a fájlokat a forrás mappából, dolgozza fel őket FileProcessor és küldje el az eredményt egy célmappába. Beállítás törlés = igaz azt jelenti, hogy a fájl a sikeres feldolgozás után törlődik a forrásmappából.

A Camel elindításához telefonálnunk kell Rajt módszer be CamelContext. Szál.alszik meghívásra kerül, hogy a Camel számára elegendő idő álljon rendelkezésre a fájlok egyik mappából a másikba való áthelyezéséhez.

FileProcessor megvalósítja Processzor interfész és egyetlen folyamat módszer, amely a fájlnevek módosításának logikáját tartalmazza:

public class A FileProcessor végrehajtja a Processor {public void process (Exchange exchange) kivételt {String originalFileName = (String) exchange.getIn (). getHeader (Exchange.FILE_NAME, String.class); Dátum dátum = új dátum (); SimpleDateFormat dateFormat = új SimpleDateFormat ("éééé-hh-nn-óó-hh-mm-s"); Karakterlánc megváltozottFájlNév = dátumFormat.format (dátum) + eredetiFájlNév; exchange.getIn (). setHeader (Exchange.FILE_NAME, megváltoztatott fájlnév); }}

A fájlnév lekérése érdekében be kell szereznünk egy bejövő üzenetet egy központból, és hozzáférnünk kell annak fejlécéhez. Ehhez hasonlóan a fájlnév módosításához frissítenünk kell az üzenet fejlécét.

5.2. Útválasztás tavaszi DSL-lel

Amikor a Spring DSL segítségével meghatározunk egy útvonalat, egy XML fájlt használunk az útvonalak és a processzorok beállításához. Ez lehetővé teszi számunkra, hogy kód nélkül használjuk az útvonalakat a Spring használatával, és végül a vezérlés teljes inverziójának előnyét kapjuk.

Erről már a meglévő cikk is foglalkozott, ezért a tavaszi DSL és a Java DSL együttes használatára fogunk összpontosítani, amely általában az útvonalak meghatározásának egyik legkedveltebb módja.

Ebben az elrendezésben a CamelContext Spring XML fájlban van meghatározva, a Camel egyedi XML szintaxisával, de az útvonal meghatározása nélkül, mint például az XML-t használó „tiszta” Spring DSL esetében:

Így azt mondjuk Camelnek, hogy használja FileRouter osztály, amely az útvonalunk definícióját tartalmazza a Java DSL-ben:

public class FileRouter kiterjeszti a RouteBuilder {private static final String SOURCE_FOLDER = "src / test / source-folder"; privát statikus végső karakterlánc DESTINATION_FOLDER = "src / test / destination-folder"; A @Orride public void configure () a (z) (kivétel: "(file: //" + SOURCE_FOLDER + "? Delete = true").. Process (new FileProcessor ()). ((File: // "+ DESTINATION_FOLDER)) nevet adja; }}

Ennek teszteléséhez létre kell hoznunk a ClassPathXmlApplicationContext ami feltölti a mi CamelContext tavasszal:

@Test public void moveFolderContentSpringDSLTest () dobja az InterruptedException {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext ("teve-context.xml"); Szál.alszik (DURATION_MILIS); applicationContext.close (); }

Ezzel a megközelítéssel további rugalmasságot és előnyöket kapunk, amelyeket a Spring nyújt, valamint a Java nyelv összes lehetőségét a Java DSL használatával.

6. Következtetés

Ebben a rövid cikkben bemutattuk az Apache Camel bevezetését, és bemutattuk a Camel használatának előnyeit az integrációs feladatokhoz, például a fájlok egyik mappából a másikba történő átirányításához.

Példánkban azt láttuk, hogy a Camel lehetővé teszi, hogy az üzleti logikára koncentráljon, és csökkenti a kazán kódjának mennyiségét.

A cikk kódja megtalálható a GitHubon.