Úvod do Vert.x.

1. Prehľad

V tomto článku si povieme niečo o Vert.x, pokryjeme jeho základné koncepty a vytvoríme s ním jednoduchú webovú službu RESTfull.

Začneme tým, že sa budeme venovať základným koncepciám sady nástrojov, pomaly sa presunieme dopredu na server HTTP a potom vytvoríme službu RESTfull.

2. O spoločnosti Vert.x

Vert.x je open source, reaktívny a viacúčelový súbor nástrojov na vývoj softvéru od vývojárov Eclipse.

Reaktívne programovanie je paradigma programovania spojená s asynchrónnymi prúdmi, ktoré reagujú na akékoľvek zmeny alebo udalosti.

Podobne Vert.x používa zbernicu udalostí na komunikáciu s rôznymi časťami aplikácie a asynchrónne odovzdáva udalosti obslužným programom, keď sú k dispozícii.

Hovoríme tomu polyglot kvôli jeho podpore pre viac jazykov JVM a non-JVM ako Java, Groovy, Ruby, Python a JavaScript.

3. Inštalácia

Aby sme mohli použiť Vert.x, musíme pridať závislosť Maven:

 io.vertx vertx-core 3.4.1 

Najnovšiu verziu závislosti nájdete tu.

3. Zvislosti

Zvislé čiary sú časti kódu, ktoré vykonáva procesor Vert.x. Sada nástrojov nám poskytuje mnoho abstraktných tried vertikál, ktoré je možné rozšíriť a implementovať tak, ako chceme.

Keďže ide o polyglot, vertikály je možné písať v ktoromkoľvek z podporovaných jazykov. Aplikácia by sa zvyčajne skladala z viacerých vertikál bežiacich v tej istej inštancii Vert.x a navzájom by komunikovali pomocou udalostí prostredníctvom zbernice udalostí.

Ak chcete vytvoriť vertikálu v JAVE, musí byť trieda implementovaná io.vertx.core.Vertikul rozhranie alebo niektorú z jeho podtried.

4. Bus udalostí

Je to nervový systém akejkoľvek aplikácie Vert.x.

Reaktívne vertikály zostávajú nečinné, kým nedostanú správu alebo udalosť. Vertikly navzájom komunikujú prostredníctvom zbernice udalostí. Správa môže byť čokoľvek, od reťazca po zložitý objekt.

Spracovanie správ je ideálne asynchrónne, správy sú zaradené do frontu na zbernicu udalostí a riadenie je vrátené odosielateľovi. Neskôr sa oddeľuje do vertikály počúvania. Odpoveď sa odosiela pomocou Budúcnosť a zavolaj späť metódy.

5. Jednoduchá aplikácia Vert.x.

Vytvorme jednoduchú aplikáciu s vertikou a nasadime ju pomocou a vertx inštancia. Aby sme vytvorili náš vertikál, predĺžime

Aby sme vytvorili náš vertikál, predĺžime io.vertx.core.AbstractVerticle triedy a prepísať štart () metóda:

verejná trieda HelloVerticle rozširuje AbstractVerticle {@Override public void start (Future future) {LOGGER.info ("Vitajte na Vertx"); }}

The štart () metóda bude vyvolaná vertx napríklad pri nasadení vertikály. Metóda trvá io.vertx.core.Future ako parameter, pomocou ktorého je možné zistiť stav asynchrónneho nasadenia vertikály.

Teraz poďme nasadiť vertikálu:

public static void main (String [] args) {Vertx vertx = Vertx.vertx (); vertx.deployVerticle (nový HelloVerticle ()); }

Podobne môžeme prepísať stop () metóda z AbstractVerticle triedy, ktorá sa vyvolá pri vypínaní vertikály:

@Override public void stop () {LOGGER.info ("Vypnutie aplikácie"); }

6. Server HTTP

Teraz roztočme server HTTP pomocou vertikály:

@Override public void start (Budúca budúcnosť) {vertx.createHttpServer () .requestHandler (r -> r.response (). End ("Vitajte na webe Vert.x Intro");}) .listen (config (). GetInteger ( "http.port", 9090), výsledok -> {if (result.succeeded ()) {future.complete ();} else {future.fail (result.cause ());}}); }

Prekonali sme štart () metóda na vytvorenie servera HTTP a k nemu je pripojený obslužný program žiadosti. The requestHandler () metóda sa volá zakaždým, keď server prijme požiadavku.

Nakoniec je server viazaný na port a AsyncResult manipulant je odovzdaný do počúvať () metóda, či je pripojenie alebo spustenie servera úspešné pomocou future.complete () alebo future.fail () v prípade akýchkoľvek chýb.

Poznač si to: config.getInteger () metóda číta hodnotu konfigurácie portu HTTP, ktorá sa načítava z externého zariadenia conf.json spis.

Vyskúšajme náš server:

@Test public void whenReceivedResponse_thenSuccess (TestContext testContext) {Async async = testContext.async (); vertx.createHttpClient () .getNow (port, "localhost", "/", response -> {response.handler (responseBody -> {testContext.assertTrue (responseBody.toString (). contains ("Hello")); async. complete ();});}); }

Na test použijeme jednotku vertx spolu s JUnit .:

 test io.vertx jednotka vertx 3.4.1 

Najnovšiu verziu môžeme získať tu.

Vertikula je nasadená a v a vertx napríklad v nastaviť() metóda jednotkovej skúšky:

@ Pred nastavením verejnej neplatnosti (TestContext testContext) {vertx = Vertx.vertx (); vertx.deployVerticle (SimpleServerVerticle.class.getName (), testContext.asyncAssertSuccess ()); }

Podobne vertx inštancia je uzavretá v @AfterClass tearDown () metóda:

@After public void tearDown (TestContext testContext) {vertx.close (testContext.asyncAssertSuccess ()); }

Všimnite si, že Nastavenie @BeforeClass () metóda vyžaduje TestContext argument. To pomáha pri kontrole a testovaní asynchrónneho správania testu. Napríklad nasadenie vertikály je asynchrónne, takže v zásade nemôžeme nič otestovať, pokiaľ to nie je správne nasadené.

Máme druhý parameter k deployVerticle () metóda, testContext.asyncAssertSuccess (). Tpoužíva sa na zistenie, či je server správne nasadený alebo či sa vyskytli nejaké poruchy. Čaká sa na future.complete () alebo future.fail () vo vertikále servera, ktorá sa má volať. V prípade poruchy test zlyhá.

7. RESTful WebService

Vytvorili sme server HTTP, poďme ho teraz použiť na hosťovanie RESTfull WebService. Aby sme tak mohli urobiť, budeme potrebovať ďalší modul Vert.x s názvom vertx-web. Toto poskytuje množstvo ďalších funkcií pre vývoj webu vertx-jadro.

Pridajme závislosť k nášmu pom.xml:

 io.vertx vertx-web 3.4.1 

Najnovšiu verziu nájdeme tu.

7.1. Router a Trasy

Vytvorme a router pre našu webovú službu. Tento smerovač použije jednoduchú cestu metódy GET a metódy handler getArtilces ():

Router router = Router.router (vertx); router.get ("/ api / baeldung / articles / article /: id") .handler (this :: getArticles);

The getArticle () metóda je jednoduchá metóda, ktorá vracia nové Článok objekt:

private void getArticles (RoutingContext routingContext) {String articleId = routingContext.request () .getParam ("id"); Article article = nový článok (articleId, "Toto je úvod do vertx", "baeldung", "01-02-2017", 1578); routingContext.response () .putHeader ("content-type", "application / json") .setStatusCode (200) .end (Json.encodePrettily (článok)); }

A Router, keď prijme požiadavku, vyhľadá zodpovedajúcu trasu a požiadavku odovzdá ďalej. The trás mať k tomu priradenú metódu obsluhy na vykonanie súhrnu s požiadavkou.

V našom prípade obsluha vyvolá znak getArticle () metóda. Dostáva routingContext objekt ako argument. Odvodzuje parameter cesty id, a vytvára Článok objekt s ním.

V poslednej časti metódy si dovoláme vyvolať odpoveď () metóda na routingContext objekt a vložte hlavičky, nastavte kód odpovede HTTP a ukončite odpoveď pomocou kódovaného JSON článok objekt.

7.2. Pridávanie Router na server

Teraz pridajme router, vytvorené v predchádzajúcej časti na server HTTP:

vertx.createHttpServer () .requestHandler (router :: accept) .listen (config (). getInteger ("http.port", 8080), result -> {if (result.succeeded ()) {future.complete (); } else {future.fail (result.cause ());}});

Všimnite si, že sme pridali requestHandler (router :: prijať) na server. Toto dá serveru pokyn, aby vyvolal súhlasiť() z router pri prijatí akejkoľvek žiadosti.

Teraz otestujme našu WebService:

@Test public void givenId_whenReceivedArticle_thenSuccess (TestContext testContext) {Async async = testContext.async (); vertx.createHttpClient () .getNow (8080, "localhost", "/ api / baeldung / articles / article / 12345", response -> {response.handler (responseBody -> {testContext.assertTrue (responseBody.toString (). obsahuje ("\" id \ ": \" 12345 \ "")); async.complete ();});}); }

8. Balenie Aplikácia Vert.x.

Na zabalenie aplikácie ako nasaditeľného archívu Java (.jar) použijeme doplnok Maven Shade a konfigurácie v exekúcia značka:

    io.vertx.core.Starter com.baeldung.SimpleServerVerticle $ {project.build.directory} / $ {project.artifactId} - $ {project.version} -app.jar 

V manifesty, Hlavný-vertikálny označuje začiatočný bod aplikácie a Hlavná trieda je trieda Vert.x, ktorá vytvára vertx inštancie a nasadzuje Hlavný-vertikálny.

9. Záver

V tomto úvodnom článku sme diskutovali o súprave nástrojov Vert.x a jej základných koncepciách. Videl som, ako vytvárať a HTTP server, s Vert.x a tiež RESTFull WebService a ukázal, ako ich testovať pomocou jednotka vertx.

Aplikáciu sme nakoniec zabalili ako spustiteľný súbor jar.

Kompletná implementácia útržkov kódu je k dispozícii na GitHub.


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