Bevezetés a tavaszi integrációba

1. Bemutatkozás

Ez a cikk ismertesse a tavaszi integráció alapfogalmait elsősorban apró, gyakorlati példákon keresztül.

A tavaszi integráció rengeteg hatékony komponenst kínál, amelyek nagymértékben javíthatják a rendszerek és folyamatok összekapcsolhatóságát a vállalati architektúrán belül.

A legfinomabb és legnépszerűbb tervezési mintákat testesíti meg, segítve a fejlesztőket elkerülni a saját fejlesztésüket.

Megvizsgáljuk azokat a konkrét igényeket, amelyeket ez a könyvtár egy vállalati alkalmazásban kielégít, és miért ajánlatos néhány alternatívája felett. Megvizsgálunk néhány rendelkezésre álló eszközt a tavaszi integrációra épülő alkalmazások fejlesztésének további egyszerűsítésére.

2. Beállítás

 org.springframework.integration Spring-Integration-core 4.3.5.RELEASE org.springframework.integration Spring-Integration-File 4.3.5.RELEASE 

A Spring Integration Core és a Spring Integration File Support legújabb verzióit letöltheti a Maven Central webhelyről.

3. Az üzenetminta

A könyvtár egyik alapmintája az Üzenetek. A minta az üzenetek köré összpontosul - olyan diszkrét adatterhelések, amelyek az eredeti rendszerből vagy folyamatból egy előre meghatározott csatornákon keresztül egy vagy több rendszerbe vagy folyamatba kerülnek.

Történelmileg a minta a legrugalmasabb módszerként merült fel több különböző rendszer integrálásában oly módon, hogy:

  • Szinte teljesen leválasztja az integrációban részt vevő rendszereket
  • Lehetővé teszi az integrációban résztvevő rendszerek számára, hogy teljesen agnosztikusak legyenek egymással a protokollok, a formázás vagy más megvalósítási részletek mögött.
  • Ösztönzi az integrációban részt vevő komponensek fejlesztését és újrafelhasználását

4. Üzenetek integrálása működés közben

Vegyük fontolóra alapvető példa amely egy MPEG videofájlt másol egy kijelölt mappából egy másik konfigurált mappába:

@Configuration @EnableIntegration nyilvános osztály BasicIntegrationConfig {public String INPUT_DIR = "the_source_dir"; public String OUTPUT_DIR = "the_dest_dir"; public String FILE_PATTERN = "* .mpeg"; @Bean public MessageChannel fileChannel () {return new DirectChannel (); } @Bean @InboundChannelAdapter (value = "fileChannel", poller = @Poller (fixedDelay = "1000")) public MessageSource fileReadingMessageSource () {FileReadingMessageSource sourceReader = new FileReadingMessageSource (); sourceReader.setDirectory (új fájl (INPUT_DIR)); sourceReader.setFilter (új SimplePatternFileListFilter (FILE_PATTERN)); return sourceReader; } @Bean @ServiceActivator (inputChannel = "fileChannel") nyilvános MessageHandler fileWritingMessageHandler () {FileWritingMessageHandler handler = új FileWritingMessageHandler (új File (OUTPUT_DIR)); handler.setFileExistsMode (FileExistsMode.REPLACE); handler.setExpectReply (hamis); visszatérő kezelő; }}

A fenti kód egy szolgáltatásaktivátort, egy integrációs csatornát és egy bejövő csatornaadaptert konfigurál.

Rövidesen részletesebben megvizsgáljuk ezeket az összetevő típusokat. A @EnableIntegration az annotáció ezt az osztályt Spring Integration konfigurációként jelöli.

Indítsuk el a tavaszi integrációs alkalmazás környezetünket:

public static void main (String ... args) {AbstractApplicationContext context = new AnnotationConfigApplicationContext (BasicIntegrationConfig.class); context.registerShutdownHook (); Szkenner szkenner = új szkenner (System.in); System.out.print ("Kérjük, írja be a q billentyűt, és nyomja meg a gombot a programból való kilépéshez:"); while (true) {String input = szkenner.nextLine (); if ("q" .egyenlő (input.trim ())) {break; }} System.exit (0); }

A fenti fő módszer elindítja az integrációs kontextust; elfogadja aq”Karakter bevitele a parancssorból a programból való kilépéshez. Vizsgáljuk meg az alkatrészeket részletesebben.

5. Tavaszi integrációs alkatrészek

5.1. Üzenet

A org.springframework.integration.Message az interfész meghatározza a tavaszi üzenetet: az adatátvitel egysége a tavaszi integrációs kontextusban.

nyilvános felületüzenet {T getPayload (); MessageHeaders getHeaders (); }

Két kulcsfontosságú elemet határoz meg:

  • Üzenetfejlécek, lényegében kulcsérték-tároló, amely metaadatok továbbítására használható, a org.springframework.integration.MessageHeaders osztály
  • Az üzenet hasznos terhe, amely az átvitelre szánt tényleges adat - felhasználási esetünkben a videofájl a hasznos terhelés

5.2. Csatorna

A tavaszi integráció (és valójában az EAI) csatornája az integrációs architektúra alapvető vízvezetéke. Ez az a cső, amelyen keresztül az üzenetek továbbíthatók egyik rendszerről a másikra.

Úgy gondolhat rá, mint egy szó szerinti csőre, amelyen keresztül egy integrált rendszer vagy folyamat más rendszerek felé tolhatja (vagy fogadhatja az üzeneteket) az üzeneteket.

A tavaszi integráció csatornái különféle ízűek, az Ön igényeitől függően. Ezek nagyrészt konfigurálhatók és dobozon kívül is használhatók, minden egyedi kód nélkül, de ha egyedi igényei vannak, robusztus keretrendszer áll rendelkezésre.

Pont-pont (P2P) csatornákat használnak 1-től 1-ig kommunikációs vonalak létrehozására a rendszerek vagy alkatrészek között. Az egyik komponens közzétesz egy üzenetet a csatornának, hogy egy másik felvehesse azt. A csatorna mindkét végén csak egy komponens lehet.

Mint láttuk, a csatorna konfigurálása ugyanolyan egyszerű, mint a példány visszaadása DirectChannel:

@Bean public MessageChannel fileChannel1 () {return new DirectChannel (); } @Bean public MessageChannel fileChannel2 () {return new DirectChannel (); } @Bean public MessageChannel fileChannel3 () {return new DirectChannel (); }

Itt három külön csatornát definiáltunk, mindegyiket a megfelelő getter-módszerük nevével azonosítva.

Közzététel-feliratkozás (Pub-Sub) A csatornákat egy vagy több kommunikációs vonal létrehozására használják a rendszerek vagy alkatrészek között. Ez lehetővé teszi számunkra, hogy a korábban létrehozott mindhárom közvetlen csatornán közzétegyük.

Tehát a példánkat követve a P2P csatornát egy pub-sub csatornára cserélhetjük:

@Bean public MessageChannel pubSubFileChannel () {return new PublishSubscribeChannel (); } @Bean @InboundChannelAdapter (value = "pubSubFileChannel", poller = @Poller (fixedDelay = "1000")) public MessageSource fileReadingMessageSource () {FileReadingMessageSource sourceReader = new FileReadingMessageSource (); sourceReader.setDirectory (új fájl (INPUT_DIR)); sourceReader.setFilter (új SimplePatternFileListFilter (FILE_PATTERN)); return sourceReader; } 

Most átalakítottuk a bejövő csatornaadaptert publikálásra Pub-Sub csatornává. Ez lehetővé teszi számunkra, hogy a forrás mappából olvasott fájlokat több rendeltetési helyre küldjük.

5.3. Híd

A Spring Integration hidat két üzenetcsatorna vagy adapter csatlakoztatására használják, ha valamilyen okból nem tudnak közvetlenül csatlakozni.

Esetünkben hidat használhatunk a Pub-Sub csatornánk három különböző P2P csatornához történő csatlakoztatásához (mivel a P2P és a Pub-Sub csatornákat nem lehet közvetlenül csatlakoztatni):

@Bean @BridgeFrom (value = "pubSubFileChannel") nyilvános MessageChannel fileChannel1 () {return new DirectChannel (); } @Bean @BridgeFrom (value = "pubSubFileChannel") nyilvános MessageChannel fileChannel2 () {return new DirectChannel (); } @Bean @BridgeFrom (value = "pubSubFileChannel") public MessageChannel fileChannel3 () {return new DirectChannel (); }

A fenti babkonfiguráció most áthidalja a pubSubFileChannel három P2P csatornára. A @BridgeFrom az annotáció határozza meg a hidat, és tetszőleges számú csatornára alkalmazható, amelyeknek fel kell fizetniük a Pub-Sub csatornára.

A fenti kódot úgy olvashatjuk, hogy „hidat hozzon létre a pubSubFileChannel nak nek fileChannel1, fileChannel2 és fileChannel3 hogy az üzeneteket a pubSubFileChannel mindhárom csatornára egyidejűleg adható. ”

5.4. Szolgáltatás aktivátor

A szolgáltatásaktivátor minden POJO, amely meghatározza a @ServiceActivator annotáció egy adott módszerhez. Ez lehetővé teszi számunkra, hogy bármilyen módszert végrehajtsunk a POJO-nkon, amikor üzenet érkezik egy bejövő csatornáról, és lehetővé teszi, hogy üzeneteket írjunk egy kifelé irányuló csatornára.

Példánkban szolgáltatásaktivátorunk egy fájlt kap a konfiguráltaktól bemeneti csatorna és beírja a beállított mappába.

5.5. Adapter

Az Adapter egy vállalati integrációs mintalapú összetevő, amely lehetővé teszi az egyik rendszerhez vagy adatforráshoz való „beépülést”. Szinte szó szerint adapter, amiről tudjuk, hogy a fali aljzathoz vagy az elektronikus eszközhöz csatlakoztatja.

Újrafelhasználható csatlakozást tesz lehetővé az egyébként „fekete dobozos” rendszerekhez, például az adatbázisokhoz, az FTP-kiszolgálókhoz és az olyan üzenetkezelő rendszerekhez, mint a JMS, az AMQP, és a közösségi hálózatokhoz, például a Twitterhez. Az ezekhez a rendszerekhez való csatlakozás szükségességének mindenütt jelenléte azt jelenti, hogy az adapterek nagyon hordozhatóak és újrafelhasználhatók (valójában van egy kis katalógus adapter, amely mindenki számára szabadon elérhető és készen áll a használatra).

Az adapterek két nagy kategóriába sorolhatók - bejövő és kimenő.

Vizsgáljuk meg ezeket a kategóriákat a mintapéldánkban használt adapterek összefüggésében:

Bejövő adapterek, amint láttuk, üzeneteket hoznak be a külső rendszerből (jelen esetben egy fájlrendszer könyvtárba).

A bejövő adapter konfigurációnk a következőkből áll:

  • An @InboundChannelAdapter annotáció, amely a bab konfigurációt adapterként jelöli - konfiguráljuk azt a csatornát, amelyre az adapter továbbítja az üzeneteit (esetünkben egy MPEG fájlt) és egy közvélemény-kutató, egy komponens, amely segít az illesztőnek a megadott időközönként lekérdezni a konfigurált mappát
  • A tavaszi java konfigurációs osztály, amely a FileReadingMessageSource, a Spring Integration osztály megvalósítása, amely kezeli a fájlrendszer lekérdezését

Kimenő adapterek üzenetek kifelé történő küldésére szolgálnak. A tavaszi integráció sokféle dobozon kívüli adaptert támogat különböző általános használatra.

6. Következtetés

A Spring Integration segítségével megvizsgáltunk egy alapvető használati esetet, amely bemutatja a könyvtár java-alapú konfigurációját és a rendelkezésre álló összetevők újrafelhasználhatóságát.

A tavaszi integrációs kód önálló projektként telepíthető a JavaSE-n belül, valamint valami nagyobb részeként egy jakartai EE-környezetben. Bár közvetlenül nem versenyez más EAI-központú termékekkel és mintákkal, mint például az Enterprise Service Buses (ESB), életképes, könnyű alternatíva sok olyan probléma megoldására, amelyet az ESB-k megoldására építettek.

A cikk forráskódját a Github projektben találja meg.