A Quarkus egy szuperszonikus szubatomi Java. A keret rövid áttekintése

A Quarkus egy szuperszonikus szubatomi Java. A keret rövid áttekintése

Bevezetés

Március XNUMX-én a RedHat (hamarosan az IBM) bemutatott új keret - quarkus. A fejlesztők szerint ez a keretrendszer GraalVM-en és OpenJDK HotSpoton alapul, és Kuberneteshez készült. A Quarkus verem a következőket tartalmazza: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus és mások.

A cél az, hogy a Java a Kubernetes telepítésének és kiszolgáló nélküli alkalmazásfejlesztésének vezető platformja legyen, egységes megközelítést biztosítva a fejlesztőknek a fejlesztéshez mind a reaktív, mind az imperatív stílusban.

Ha megnézed ezt keretrendszerek osztályozása, akkor a Quarkus valahol az „Aggregátorok/Kódgenerátorok” és a „Magas szintű fullstack keretrendszerek” között van. Ez már több, mint egy aggregátor, de még a teljes stack-et sem éri el, mert... háttérfejlesztésre szabva.

Nagyon gyors alkalmazásindítási sebességet és alacsony memóriafogyasztást ígérnek. Íme az adatok a fejlesztő webhelyéről:

Az elejétől az első válaszig eltelt idő:

Configuration
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Traditional Cloud Native Stack*
4.3
9.5

Memóriafogyasztás (Mb):

Configuration
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Traditional Cloud Native Stack*
140
218

Lenyűgöző, nem?

*Nem találtam információt erről a technológiai kötegről, feltételezhetjük, hogy ez valamiféle Spring Boot egy kiegészítő testkészlettel.

Helló Világ!

A Quarkusban írt legegyszerűbb alkalmazás így nézne ki:

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String hello() {
       return "hello";
   }
}

Ez szó szerint egy osztály, és ez elég! Az alkalmazást a Maven használatával futtathatja fejlesztési módban:

mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello

A különbség a normál jelentkezéstől, hogy nincs Pályázati osztály! A Quarkus támogatja a forró újratöltést, így újraindítás nélkül módosíthatja az alkalmazást, ami még gyorsabbá teszi a fejlesztést.

Mi a következő lépés? A vezérlőhöz megjegyzés segítségével adhat hozzá szolgáltatást Injekció. Szerviz kód:

@ApplicationScoped
public class GreetingService {

   public String greeting(String name) {
       return "Hello " + name + "!";
   }
}

Vezérlő:

@Path("/hello")
public class GreetingResource {

   @Inject
   GreetingService service;

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public String greeting(@PathParam("name") String name) {
       return service.greeting(name);
   }
}

$ curl http://localhost:8080/hello/developer
Hello developer!

Vegye figyelembe, hogy a Quarkus szabványos megjegyzéseket használ az ismert keretrendszerekből - CDI és JAX-RS. Természetesen semmi újat nem kell megtanulnia, ha korábban már dolgozott CDI-vel és JAX-RS-sel.

Munka az adatbázissal

Az entitásokhoz hibernált és szabványos JPA megjegyzések használatosak. A REST vezérlőkhöz hasonlóan minimális kódot kell írnia. Elegendő az összeállítási fájlban feltüntetni a függőségeket, annotációkat hozzáadni @Entity és konfigurálja az adatforrást az application.properties-ben.

Minden. Nincs sessionFactory, persistence.xml vagy más szolgáltatás fájl. Csak a szükséges kódot írjuk le. Szükség esetén azonban létrehozhat egy persistence.xml fájlt, és finomabban konfigurálhatja az ORM réteget.

A Quarkus támogatja az entitások gyorsítótárazását, az egy-a-többhöz kapcsolatok gyűjteményeit és a lekérdezéseket. Első pillantásra remekül néz ki, de az helyi gyorsítótárazás, egy Kubernetes-csomóponthoz. Azok. A különböző csomópontok gyorsítótárai nincsenek szinkronizálva egymással. Remélem ez átmeneti.

Aszinkron kód végrehajtása

Mint fentebb említettük, a Quarkus is támogatja a reaktív programozási stílust. Az előző pályázat kódja más formában is írható.

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public CompletionStage<String> greeting(@PathParam("name") String name) {
       return CompletableFuture.supplyAsync(() -> {
           return "Hello " + name + "!";
       });
   }
}

Aszinkron kód is átvihető a szolgáltatásba, az eredmény ugyanaz lesz.

tesztelés

A Quarkus alkalmazások tesztjei JUnit4-ben vagy JUnit5-ben írhatók. Az alábbiakban egy végpont tesztpéldája látható, a RestAssured használatával íródott, de más keretrendszer is használható:

@QuarkusTest
public class GreetingResourceTest {

   @Test
   public void testGreetingEndpoint() {
       String uuid = UUID.randomUUID().toString();
       given()
         .pathParam("name", uuid)
         .when().get("/hello/{name}")
         .then()
           .statusCode(200)
           .body(is("Hello " + uuid + "!"));
   }
}

A @QuarkusTest megjegyzés arra utasítja, hogy a tesztek futtatása előtt futtassa az alkalmazást. A többi minden fejlesztő számára ismerős kód.

Platform-specifikus alkalmazás

Mivel a Quarkus szorosan integrálva van a GraalVM-mel, természetesen lehetséges platform-specifikus kód generálása. Ehhez telepítenie kell a GraalVM-et, és meg kell adnia a GRAALVM_HOME környezeti változót. További regisztráljon egy profilt az összeszereléshez és adja meg az alkalmazás létrehozásakor:

mvn package -Pnative

Érdekes módon a generált alkalmazás tesztelhető. És ez azért fontos, mert a natív kód végrehajtása eltérhet a JVM-en való végrehajtástól. A @SubstrateTest annotáció platform-specifikus alkalmazáskódot futtat. A meglévő tesztkód újrafelhasználása történhet örökléssel; ennek eredményeként a platformfüggő alkalmazás tesztelésére szolgáló kód így fog kinézni:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Az előállított kép Dockerben csomagolható és Kubernetesben vagy OpenShiftben futhat, részletesen le van írva utasítás.

szerszámok

A Quarkus keretrendszer Maven és Gradle segítségével használható. A Maven teljes mértékben támogatott, ellentétben a Gradle-lel. Sajnos a Gradle jelenleg nem támogatja az üres projekt generálását, a weboldalon részletes információk találhatók tankönyv.

Hosszabbítások

A Quarkus egy bővíthető keret. Jelenleg megrendelés van 40 bővítmény, amelyek különféle funkciókat adnak hozzá - a támogatástól kezdve Rugós DI konténer и Apache teve mielőtt naplózza és közzéteszi a futó szolgáltatások mérőszámait. És már van egy bővítmény, amely a Java mellett támogatja az alkalmazások írását Kotlinban.

Következtetés

Véleményem szerint a Quarkus teljesen összhangban van az akkori trendekkel. A háttérkód fejlesztése egyre könnyebbé válik, és ez a keretrendszer tovább egyszerűsíti és felgyorsítja a szolgáltatásfejlesztést a Docker és a Kubernetes natív támogatásával. Óriási plusz a GraalVM beépített támogatása és a platformfüggő képek generálása, amely lehetővé teszi, hogy a szolgáltatások valóban gyorsan induljanak el, és kevés memóriát foglalnak el. És ez nagyon fontos a mikroszolgáltatások és a szerver nélküli architektúra iránti tömegszenvedélyünk idején.

Hivatalos oldal - quarkus.io. Példák projektekre a gyors kezdéshez már elérhetők a webhelyen GitHub.

Forrás: will.com

Hozzászólás