Sissejuhatus
XNUMX. märtsil RedHat (varsti IBM)
Eesmärk on muuta Java Kubernetese juurutamise ja serverivaba rakenduste arendamise juhtivaks platvormiks, pakkudes arendajatele ühtset lähenemist arendusele nii reaktiivsetes kui ka imperatiivsetes stiilides.
Vaatan
Lubatakse väga suurt rakenduste käivitamise kiirust ja väikest mälukulu. Siin on andmed arendaja veebisaidilt:
Aeg algusest esimese vastuseni:
Konfiguratsioon
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Traditsiooniline Cloud Native Stack*
4.3
9.5
Mälu tarbimine (Mb):
Konfiguratsioon
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Traditsiooniline Cloud Native Stack*
140
218
Muljetavaldav, kas pole?
*Ma ei leidnud selle tehnoloogiapaki kohta teavet, võib eeldada, et see on mingi Spring Boot koos täiendava kehakomplektiga.
Tere, Maailm!
Lihtsaim Quarkuses kirjutatud rakendus näeks välja selline:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
See on sõna otseses mõttes üks klass ja sellest piisab! Rakendust saate Maveni abil arendusrežiimis käivitada:
mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello
Erinevus tavarakendusest seisneb selles, et puudub Rakendusklass! Quarkus toetab kuuma taaslaadimist, nii et saate oma rakendust muuta ilma seda taaskäivitamata, muutes arenduse veelgi kiiremaks.
Mis järgmiseks? Saate lisada kontrollerile teenuse märkuse abil
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Kontroller:
@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!
Pange tähele, et Quarkus kasutab standardseid märkusi tuttavatest raamistikest - CDI ja JAX-RS. Muidugi pole vaja midagi uut õppida, kui olete varem töötanud CDI ja JAX-RS-iga.
Töö andmebaasiga
Olemite jaoks kasutatakse talveunerežiimi ja standardseid JPA märkusi. Nagu REST-kontrollerite puhul, peate kirjutama minimaalselt koodi. Piisab, kui märkida koostefailis sõltuvused, lisada märkused @Entity
ja konfigureerige andmeallikas rakenduses application.properties.
Kõik. Ei mingeid sessionFactory, persistence.xml ega muid teenusefaile. Kirjutame ainult vajaliku koodi. Vajadusel saab aga luua faili persistence.xml ja ORM-i kihti täpsemalt seadistada.
Quarkus toetab olemite vahemällu salvestamist, üks-mitmele suhete kogusid ja päringuid. Esmapilgul tundub see suurepärane, kuid nii see on kohalik vahemällu salvestamine ühe Kubernetese sõlme jaoks. Need. Erinevate sõlmede vahemälud ei ole omavahel sünkroonitud. Loodan, et see on ajutine.
Asünkroonse koodi täitmine
Nagu eespool mainitud, toetab Quarkus ka reaktiivset programmeerimisstiili. Eelmise taotluse koodi saab kirjutada erineval kujul.
@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 + "!";
});
}
}
Asünkroonset koodi saab ka teenusesse üle kanda, tulemus on sama.
Katsetamine
Quarkuse rakenduste teste saab kirjutada JUnit4-s või JUnit5-s. Allpool on näidiskatse lõpp-punkti jaoks, see on kirjutatud RestAssurediga, kuid kasutada saab ka teist raamistikku:
@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 + "!"));
}
}
@QuarkusTest märkus juhendab rakendust enne testide käivitamist käivitama. Ülejäänu on kõigile arendajatele tuttav kood.
Platvormispetsiifiline rakendus
Kuna Quarkus on GraalVM-iga tihedalt integreeritud, on loomulikult võimalik genereerida platvormipõhist koodi. Selleks tuleb installida GraalVM ja määrata GRAALVM_HOME keskkonnamuutuja. Edasi
mvn package -Pnative
Huvitaval kombel saab loodud rakendust testida. Ja see on oluline, kuna algkoodi täitmine võib JVM-is käitamisest erineda. @SubstrateTest annotatsioon käitab platvormipõhist rakenduse koodi. Olemasoleva testkoodi taaskasutamist saab teha pärimise teel; selle tulemusel näeb platvormist sõltuva rakenduse testimise kood välja järgmine:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
Loodud pildi saab pakkida Dockerisse ja käivitada Kubernetesis või OpenShiftis, mida on üksikasjalikult kirjeldatud
Toolkit
Quarkuse raamistikku saab kasutada koos Maveni ja Gradle'iga. Erinevalt Gradle'ist on Maven täielikult toetatud. Paraku hetkel Gradle tühja projekti genereerimist ei toeta, kodulehel on täpsem info olemas
Laiendused
Quarkus on laiendatav raamistik. Hetkel on tellimus olemas
Järeldus
Quarkus on minu meelest üsna omaaegsete trendidega kooskõlas. Taustaprogrammi koodiarendus muutub üha lihtsamaks ning see raamistik lihtsustab ja kiirendab veelgi teenusearendust, lisades Dockeri ja Kubernetese natiivse toe. Suureks plussiks on GraalVM-i sisseehitatud tugi ja platvormist sõltuvate piltide genereerimine, mis võimaldab teenustel väga kiiresti käivituda ja võtta vähe mäluruumi. Ja see on väga oluline meie ajal, mil me tunneme massilist kirge mikroteenuste ja serverita arhitektuuri vastu.
Ametlik sait -
Allikas: www.habr.com