Bevezetés
Március XNUMX-én a RedHat (hamarosan az IBM)
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
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
@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
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
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
Hosszabbítások
A Quarkus egy bővíthető keret. Jelenleg megrendelés van
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 -
Forrás: will.com