Apache teve tavaszi csizmával

1. Áttekintés

Alapjában véve az Apache Camel egy integrációs motor, amely - egyszerűen fogalmazva - felhasználható a széles és változatos technológiák közötti kölcsönhatások megkönnyítésére.

Ezeket a hidakat a szolgáltatások és a technológiák között hívják útvonalak. Az útvonalakat egy motor hajtja végre CamelContext), és úgynevezett „csereüzenetekkel” kommunikálnak.

2. Maven-függőségek

A kezdéshez hozzá kell adnunk a Spring Boot, a Camel, a Rest API és a Swagger és a JSON függőségeit:

  org.apache.camel teve-servlet-starter $ {camel.version} org.apache.camel teve-jackson-starter $ {camel.version} org.apache.camel teve-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} 

Az Apache Camel függőségek legújabb verziói itt találhatók.

3. A főosztály

Először hozzunk létre egy tavaszi csizmát Alkalmazás:

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

4. Teve konfigurációk a tavaszi indításhoz

Konfiguráljuk most a Spring alkalmazásunkat, kezdve a konfigurációs fájlokkal (tulajdonságokkal).

Konfiguráljunk például egy naplót az alkalmazásunkhoz egy alkalmazás.tulajdonságok fájl src / main / resources:

logging.config = classpath: logback.xml teve.springboot.name = MyCamel szerver.cím = 0.0.0.0 management.address = 0.0.0.0 management.port = 8081 endpoints.enabled = true endpoints.health.enabled = true

Ez a példa egy alkalmazás.tulajdonságok fájl, amely a Logback konfiguráció elérési útját is beállítja. Az IP értékének „0.0.0.0” beállításával teljes mértékben korlátozzuk admin és menedzsment hozzáférés a webszerveren, a Spring Boot biztosítja. Emellett engedélyezzük a szükséges hálózati hozzáférést az alkalmazás végpontjaihoz, valamint az állapotfelmérési végpontokhoz.

Egy másik konfigurációs fájl a alkalmazás.yml. Ebben hozzáadunk néhány tulajdonságot, amelyek segítenek az értékek beillesztésében az alkalmazás útvonalaiba:

szerver: port: 8080 teve: springboot: név: ServicesRest management: port: 8081 végpontok: engedélyezve: false health: engedélyezve: true quickstart: generálOrderPeriod: 10s processOrderPeriod: 30s

5. A Camel Servlet beállítása

A Camel használatának egyik módja az, hogy regisztrálja szervletként, így elfoghatja a HTTP kéréseket és átirányíthatja őket az alkalmazásunkba.

Mint már korábban említettük, a Camel 2.18-as vagy annál fiatalabb verziójával bámulva kihasználhatjuk az előnyeinket alkalmazás.yml - paraméter létrehozásával a végső URL-hez. Később a Java kódunkba kerül:

baeldung: api: út: '/ teve'

Vissza a mi oldalunkra Alkalmazás osztályban regisztrálnunk kell a Camel servletet a kontextusútunk gyökerénél, amelyet a referenciából fogunk injektálni baeldung.api.path ban,-ben alkalmazás.yml amikor az alkalmazás elindul:

@Value ("$ {baeldung.api.path}") String contextPath; @Bean ServletRegistrationBean servletRegistrationBean () {ServletRegistrationBean servlet = new ServletRegistrationBean (új CamelHttpTransportServlet (), contextPath + "/ *"); servlet.setName ("CamelServlet"); visszatérő servlet; }

A Camel 2.19-es verziójától kezdve ez a konfiguráció a CamelServlet alapértelmezés szerint "/teve".

6. Útvonal építése

Kezdjük el az útvonalat a RouteBuilder osztály Camelből, és a-nak állítva @Összetevő így a komponens-ellenőrzési rutin megtalálja a webszerver inicializálása során:

@Component osztály A RestApi kiterjeszti a RouteBuilder-t {@Orride public void configure () {CamelContext context = new DefaultCamelContext (); restConfiguration () ... rest ("/ api /") ... from ("direct: remoteService") ...}}

Ebben az osztályban felülírjuk a Beállítás() módszer a Camel's-től RouteBuilder osztály.

A tevének mindig szüksége van egy CamelContext példa - a bejövő és kimenő üzenetek tárolásának alapvető összetevője.

Ebben az egyszerű példában DefaultCamelContext elegendő, mivel csak az üzeneteket és az útvonalakat köti bele, például a REST szolgáltatást, amelyet létrehozni fogunk.

6.1. A restConfiguration () Útvonal

Ezután létrehozunk egy REST deklarációt azokhoz a végpontokhoz, amelyeket a restConfiguration () módszer:

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)

Itt regisztráljuk a kontextus elérési útját a YAML fájl injektált attribútumával. Ugyanezt a logikát alkalmaztuk alkalmazásunk portjára is. A CORS engedélyezve van, lehetővé téve ennek a webszolgáltatásnak a helyszíni használatát. A kötési mód lehetővé teszi és átalakítja az argumentumokat az API-vá.

Ezután hozzáadjuk a Swagger dokumentációt az előzőleg beállított URI-hoz, címhez és verzióhoz. Amikor módszereket / végpontokat hozunk létre a REST webszolgáltatásunkhoz, a Swagger dokumentációja automatikusan frissül.

Ez a Swagger-kontextus maga egy teve útvonal, és az indítási folyamat során a szerver naplójában láthatunk róla néhány technikai információt. Példadokumentumunk alapértelmezés szerint a következő helyen található: // localhost: 8080 / teve / api-doc.

6.2. A pihenés() Útvonal

Most hajtsuk végre a pihenés() metódus hívása a Beállítás() a fent felsorolt ​​módszer:

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

Ez a módszer meglehetősen egyszerű azok számára, akik ismerik az API-kat. A id az útvonal azonosítása a CamelContext. A következő sor meghatározza a MIME típust. A kötési mód itt van meghatározva annak bemutatására, hogy beállíthatunk egy módot a restConfiguration ().

A post () metódus hozzáad egy műveletet az API-hoz, létrehozva egyPOST / bab”Végpont, míg a MyBean (egy rendes Java bab egy Egész id és Karakterlánc neve) meghatározza a várható paramétereket.

Hasonlóképpen, a HTTP-műveletek, például a GET, a PUT és a DELETE is elérhetőek, ezek formájában is kap(), put (), töröl().

Végül a nak nek() módszer hidat hoz létre egy másik útvonalra. Itt azt mondja Camelnek, hogy keressen a kontextusában / motorjában egy másik útvonalra, amelyet létrehozni fogunk - amelyet az érték / id nevez el és észlel “közvetlen: …“, Amely megfelel a tól től() módszer.

6.3. A tól től() Útvonal ezzel: átalakítás ()

A Camellel való együttműködés során az útvonal megkapja a paramétereket, majd átalakítja, átalakítja és feldolgozza ezeket a paramétereket. Ezt követően ezeket a paramétereket elküldi egy másik útvonalra, amely továbbítja az eredményt a kívánt kimenetre (fájl, adatbázis, SMTP szerver vagy REST API válasz).

Ebben a cikkben csak egy újabb útvonalat hozunk létre a Beállítás() módszer, amelyet felülbírálunk. Ez lesz utoljára a cél útvonala nak nek() útvonal:

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

A tól től() A módszer ugyanazokat az elveket követi, és sok ugyanazzal a módszerrel rendelkezik, mint a pihenés() módszerrel, kivéve, hogy a teve kontextusüzeneteiből fogyaszt. Ez az oka a „közvetlen útvonalon“, Ami kapcsolatot hoz létre a fent említett módszerhez pihenés (). - ().

Sok más konverzió is elérhető, beleértve a Java primitívek (vagy objektumok) kivonását és egy perzisztens rétegbe történő továbbítását. Figyelje meg, hogy az útvonalak mindig beolvassák a bejövő üzeneteket, így a láncolt útvonalak figyelmen kívül hagyják a kimenő üzeneteket.

Példánk készen áll, és kipróbálhatjuk:

  • Futtassa a prompt parancsot: mvn spring-boot: fut
  • Tegyen POST kérést // localhost: 8080 / teve / api / bab fejléc paraméterekkel: Tartalom-típus: application / json, és egy hasznos teher {“Id”: 1, “name”: “Világ”}
  • Kapnunk kell egy 201-es visszatérési kódot és a választ: Helló Világ

6.4. A EGYSZERŰ parancsfájlnyelv

A példa a naplózást a nyomkövetés () módszer. Figyelje meg, hogy a ${} helyőrzők; ezek a Camelhez tartozó, SIMPLE nevű szkriptnyelv részei. Olyan üzenetekre vonatkozik, amelyeket az útvonalon cserélnek, például az üzenet szövegének törzséhez.

Példánkban a SIMPLE-t használjuk a naplóba a Camel üzenettestben található babattribútumok kimenetéhez.

Használhatjuk egyszerű átalakítások elvégzésére is, amint az a átalakítás () módszer.

6.5. A tól től() Útvonal ezzel: folyamat()

Tegyünk valami értelmesebbet, például hívjuk meg a szolgáltatási réteget a feldolgozott adatok visszaküldése érdekében. A SIMPLE nem nehéz adatfeldolgozásra szolgál, ezért cseréljük le a átalakítás () val,-vel folyamat() módszer:

from ("direct: remoteService") .routeId ("direct-route") .tracing () .log (">>> $ {body.id}") .log (">>> $ {body.name}" ) .process (new Processor () {@Orride public void process (Exchange exchange) dobja a Kivételt {MyBean bodyIn = (MyBean) exchange.getIn (). getBody (); ExampleServices.example (bodyIn); exchange.getIn (). setBody (bodyIn);}}) .setHeader (Exchange.HTTP_RESPONSE_CODE, konstans (200));

Ez lehetővé teszi számunkra, hogy kivonjuk az adatokat egy babba, ugyanaz, mint amelyet korábban a típus() módszer, és dolgozza fel a mi PéldaSzolgáltatások réteg.

Mivel beállítottuk a bindMode () korábban a JSON-ra, a válasz már megfelelő JSON formátumban van, a POJO-nk alapján generálva. Ez azt jelenti, hogy egy PéldaSzolgáltatások osztály:

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

Ugyanaz a HTTP-kérés most 201 válaszkóddal és törzszel tér vissza: {“Id”: 10, “name”: “Hello, Világ”}.

7. Következtetés

Néhány kódsorral egy viszonylag teljes alkalmazást sikerült létrehoznunk. Minden függőség felépítése, kezelése és automatikus futtatása egyetlen paranccsal történik. Sőt, létrehozhatunk olyan API-kat, amelyek mindenféle technológiát összekapcsolnak.

Ez a megközelítés szintén nagyon konténerbarát, és nagyon karcsú kiszolgálói környezetet eredményez, amely igény szerint könnyen megismételhető. Az extra konfigurációs lehetőségek egyszerűen beépíthetők egy konténersablon konfigurációs fájlba.

Ez a REST példa a GitHubon található.

Végül a szűrő(), folyamat(), átalakítás (), és marshall () API-k, sok más integrációs minta és adatmanipuláció érhető el a Camelben:

  • Teveintegrációs minták
  • Teve felhasználói útmutató
  • Camel SIMPLE Nyelv