Apache ťava s jarnou topánkou

1. Prehľad

Vo svojej podstate je Apache Camel integračným mechanizmom, ktorý - zjednodušene povedané - možno použiť na uľahčenie interakcie medzi širokou škálou technológií.

Tieto mosty medzi službami a technológiami sa nazývajú trás. Trasy sú implementované na motore ( CamelContext) a komunikujú pomocou takzvaných „výmenných správ“.

2. Maven závislosti

Na začiatok budeme musieť zahrnúť závislosti pre Spring Boot, Camel, Rest API s Swagger a JSON:

  org.apache.camel camel-servlet-starter $ {camel.version} org.apache.camel camel-jackson-starter $ {camel.version} org.apache.camel camel-swagger-java-starter $ {camel.version} org.apache.camel camel-spring-boot-starter $ {camel.version} org.springframework.boot spring-boot-starter-web $ {spring-boot-starter.version} 

Najnovšie verzie závislostí Apache Camel nájdete tu.

3. Hlavná trieda

Najprv si vytvoríme Spring Boot Aplikácia:

@SpringBootApplication @ComponentScan (basePackages = "com.baeldung.camel") verejná trieda Aplikácia {public static void main (String [] args) {SpringApplication.run (Application.class, args); }}

4. Konfigurácie ťavy pre jarné zavedenie

Poďme si teraz nakonfigurovať našu aplikáciu s pružinou, počnúc konfiguračnými súbormi (vlastnosťami).

Napríklad nakonfigurujme protokol pre našu aplikáciu na serveri application.properties uložiť v src / main / resources:

logging.config = classpath: logback.xml camel.springboot.name = MyCamel server.address = 0.0.0.0 management.address = 0.0.0.0 management.port = 8081 endpoints.enabled = true endpoints.health.enabled = true

Tento príklad ukazuje application.properties súbor, ktorý tiež nastavuje cestu ku konfigurácii Logback. Nastavením adresy IP na „0.0.0.0“ úplne obmedzujeme admin a zvládanie prístup na webový server poskytovaný Spring Boot. Tiež povoľujeme potrebný sieťový prístup k našim koncovým bodom aplikácie, ako aj ku koncovým bodom kontroly stavu.

Ďalším konfiguračným súborom je aplikácia.yml. V ňom pridáme niektoré vlastnosti, ktoré nám pomôžu vložiť hodnoty do našich aplikačných trás:

server: port: 8080 camel: springboot: name: ServicesRest management: port: 8081 endpoints: enabled: false health: enabled: true quickstart: generateOrderPeriod: 10s processOrderPeriod: 30s

5. Nastavenie servera Camel Servlet

Jedným zo spôsobov, ako začať používať Camel, je zaregistrovať ho ako servlet, aby mohol zachytiť požiadavky HTTP a presmerovať ich na našu aplikáciu.

Ako už bolo spomenuté, pri pohľade na verziu Camel 2.18 a nižšiu môžeme využívať výhody našej aplikácia.yml - vytvorením parametra pre našu cieľovú webovú adresu. Neskôr bude vložený do nášho kódu Java:

baeldung: api: cesta: „/ ťava“

Späť k nášmu Aplikácia triedy, musíme zaregistrovať servel Camel v koreni našej kontextovej cesty, ktorý bude vložený z referencie baeldung.api.cesta v aplikácia.yml pri spustení aplikácie:

@Value ("$ {baeldung.api.path}") String contextPath; @Bean ServletRegistrationBean servletRegistrationBean () {ServletRegistrationBean servlet = nový ServletRegistrationBean (nový CamelHttpTransportServlet (), contextPath + "/ *"); servlet.setName ("CamelServlet"); spätný servlet; }

Od verzie Camel verzie 2.19 bola táto konfigurácia zrušená ako CamelServlet je predvolene nastavený na „/ Ťava“.

6. Budovanie trasy

Začnime robiť trasu rozšírením RouteBuilder triedy od Camel a nastavenie ako @ Komponent takže rutina skenovania komponentov ju môže nájsť počas inicializácie webového servera:

@ Trieda komponentu RestApi rozširuje RouteBuilder {@Override public void configure () {CamelContext context = nový DefaultCamelContext (); restConfiguration () ... rest ("/ api /") ... z ("direct: remoteService") ...}}

V tejto triede prepíšeme Konfigurovať () metóda od Camel RouteBuilder trieda.

Ťava vždy potrebuje a CamelContext inštancia - hlavný komponent, v ktorom sú uchovávané prichádzajúce a odchádzajúce správy.

V tomto jednoduchom príklade DefaultCamelContext postačuje, pretože do nej iba viaže správy a trasy, ako napríklad služba REST, ktorú vytvoríme.

6.1. The restConfiguration () Trasa

Ďalej vytvoríme deklaráciu REST pre koncové body, ktoré plánujeme vytvoriť v restConfiguration () metóda:

restConfiguration () .contextPath (contextPath) .port (serverPort) .enableCORS (true) .apiContextPath ("/ api-doc") .apiProperty ("api.title", "Test REST API") .apiProperty ("api.version" "," v1 ") .apiContextRouteId (" doc-api ") .component (" servlet ") .bindingMode (RestBindingMode.json)

Tu zaregistrujeme kontextovú cestu s našim vloženým atribútom zo súboru YAML. Rovnaká logika sa uplatnila aj na port našej aplikácie. CORS je povolený, čo umožňuje použitie tejto webovej služby medzi stránkami. Režim väzby umožňuje a prevádza argumenty na naše API.

Ďalej pridáme dokumentáciu Swagger do URI, názvu a verzie, ktorú sme predtým nastavili. Keď vytvárame metódy / koncové body pre našu webovú službu REST, dokumentácia Swagger sa automaticky aktualizuje.

Tento kontext Swagger je sám o sebe cestou Camel a niektoré technické informácie o ňom môžeme vidieť v protokole servera počas procesu spustenia. Naša vzorová dokumentácia je štandardne poskytovaná na adrese // localhost: 8080 / camel / api-doc.

6.2. The zvyšok () Trasa

Teraz poďme implementovať zvyšok () metóda volania z Konfigurovať () vyššie uvedená metóda:

rest ("/ api /") .id ("api-route") .consumes ("application / json") .post ("/ bean") .bindingMode (RestBindingMode.json_xml) .type (MyBean.class) .to ("direct: remoteService");

Táto metóda je celkom jednoduchá pre tých, ktorí poznajú API. The id je identifikácia trasy vo vnútri CamelContext. Nasledujúci riadok definuje typ MIME. Tu je definovaný režim väzby, ktorý ukazuje, že môžeme nastaviť režim na restConfiguration ().

The príspevok () metóda pridá operáciu do API a vygeneruje „POST / fazuľa”Koncový bod, zatiaľ čo MyBean (bežná Java fazuľa s Celé číslo a Názov reťazca) definuje očakávané parametre.

Podobne sú k dispozícii aj akcie HTTP ako GET, PUT a DELETE vo forme dostať (), put (), odstrániť ().

Nakoniec do () metóda vytvorí most na inú trasu. Tu povie Camel, aby vo svojom kontexte / engine vyhľadal inú cestu, ktorú vytvoríme - ktorá je pomenovaná a detekovaná hodnotou / id “priamy: …“, Zodpovedajúce trase definovanej v od () metóda.

6.3. The od () Trasa s transformovať ()

Pri práci s Camel získava trasa parametre, ktoré potom prevádza, transformuje a spracováva. Potom odošle tieto parametre na inú cestu, ktorá pošle výsledok na požadovaný výstup (súbor, databáza, server SMTP alebo odpoveď REST API).

V tomto článku vytvoríme iba inú trasu vo vnútri Konfigurovať () metóda, ktorú prevyšujeme. Bude to cieľová trasa pre našu poslednú do () trasa:

from ("direct: remoteService") .routeId ("direct-route") .tracing () .log (">>> $ {body.id}") .log (">>> $ {body.name}" ) .transform (). simple ("Hello $ {in.body.name}") .setHeader (Exchange.HTTP_RESPONSE_CODE, constant (200));

The od () metóda dodržiava rovnaké princípy a má veľa rovnakých metód ako metóda zvyšok () metódou, až na to, že spotrebováva z kontextových správ Camel. To je dôvod pre parameter „priama trasa“, Čím sa vytvorí odkaz na vyššie uvedenú metódu zvyšok (). až ().

K dispozícii je mnoho ďalších konverzií, vrátane extrakcie ako Java primitív (alebo objektov) a jej odoslania do vrstvy perzistencie. Upozorňujeme, že trasy sa vždy čítajú z prichádzajúcich správ, takže reťazené trasy budú odchádzajúce správy ignorovať.

Náš príklad je pripravený a môžeme ho vyskúšať:

  • Spustite príkazový riadok: mvn spring-boot: spustiť
  • Odošlite žiadosť POST na adresu // localhost: 8080 / camel / api / bean s parametrami hlavičky: Typ obsahu: aplikácia / jsona užitočné zaťaženie {„Id“: 1, „name“: „Svet“}
  • Mali by sme dostať návratový kód 201 a odpoveď: Dobrý deň, svet

6.4. JEDNODUCHÝ skriptovací jazyk

Príklad zobrazuje výstup protokolovania pomocou sledovanie () metóda. Všimnite si, že sme použili ${} zástupné symboly; sú súčasťou skriptovacieho jazyka patriaceho k Camel, ktorý sa volá SIMPLE. Aplikuje sa na správy, ktoré sa vymieňajú po trase, ako napríklad telo správy.

V našom príklade používame SIMPLE na výstup do protokolu atribúty fazule, ktoré sú vnútri tela správy Camel.

Môžeme ho tiež použiť na jednoduché transformácie, ako bolo ukázané v transformovať () metóda.

6.5. The od () Trasa s proces ()

Urobme niečo zmysluplnejšie, napríklad volanie servisnej vrstvy na vrátenie spracovaných údajov. JEDNODUCHÉ nie je určené na ťažké spracovanie údajov, preto ho nahraďme transformovať () s proces () metóda:

from ("direct: remoteService") .routeId ("direct-route") .tracing () .log (">>> $ {body.id}") .log (">>> $ {body.name}" ) .process (new Processor () {@Override public void process (Exchange exchange) throws Exception {MyBean bodyIn = (MyBean) exchange.getIn (). getBody (); ExampleServices.example (bodyIn); exchange.getIn (). setBody (bodyIn);}}) .setHeader (Exchange.HTTP_RESPONSE_CODE, konštanta (200));

To nám umožňuje extrahovať údaje do fazule, tej istej, ktorá bola predtým definovaná v typ () metódou a spracujeme ju v našom ExampleServices vrstva.

Keďže sme nastavili bindingMode () na JSON predtým, odpoveď už je v správnom formáte JSON, generovanom na základe nášho POJO. To znamená, že pre ExampleServices trieda:

verejná trieda ExampleServices {public static void example (MyBean bodyIn) {bodyIn.setName ("Hello," + bodyIn.getName ()); bodyIn.setId (bodyIn.getId () * 10); }}

Rovnaká požiadavka HTTP sa teraz vracia s kódom odpovede 201 a textom: {“Id”: 10, ”name”: „Hello, World”}.

7. Záver

Pomocou niekoľkých riadkov kódu sa nám podarilo vytvoriť relatívne kompletnú aplikáciu. Všetky závislosti sa vytvárajú, spravujú a spúšťajú automaticky pomocou jediného príkazu. Okrem toho môžeme vytvárať API, ktoré spájajú najrôznejšie technológie.

Tento prístup je tiež veľmi vhodný pre kontajner, čo vedie k veľmi štíhlemu prostrediu servera, ktoré sa dá ľahko replikovať na požiadanie. Dodatočné možnosti konfigurácie možno ľahko začleniť do konfiguračného súboru šablóny kontajnera.

Tento príklad REST nájdete na GitHub.

Napokon nad rámec filter (), proces (), transformovať ()a marshall () V aplikácii Camel sú k dispozícii API, mnoho ďalších integračných vzorov a manipulácia s dátami:

  • Vzory integrácie ťavy
  • Príručka používateľa Camel
  • JEDNODUCHÝ jazyk ťavy

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