
Sissejuhatus
Seitsmenda mĂ€rtsil teatas RedHat (peagi IBM) uus raamistik â . Arendajate sĂ”nul pĂ”hineb see raamistik GraalVM-il ja OpenJDK HotSpotil ning on mĂ”eldud Kubernetesetele. Quarkuse tehnoloogiakuhja kuuluvad: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus ja teised.
Loomise eesmĂ€rk on muuta Java juhtivaks platvormiks Kuberneteses juurutamiseks ja serverivabade rakenduste arendamiseks, pakkudes arendajatele ĂŒhtset lĂ€henemist arendamiseks nii reaktiivses kui ka imperatiivses stiilis.
Kui vaadata raamistikude klassifikatsiooni, siis Quarkus asub kuskil "Aglomeerijate/Koodigeneraatorite" ja "Korkeimates fullstack raamistikute" vahel. See on juba rohkem kui aglomeerija, kuid ei saavuta full-stack taset, kuna on suunatud backendi arendusele.
Lubatud on vÀga kÔrge rakenduse kÀivitamise kiirus ja madal mÀlukulu. Siin on andmed arendaja saidilt:
Aja alates kÀivitamisest kuni esimese vastuseni (s):
Konfiguratsioon
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Traditsiooniline pilvepÔhine kuhi*
4.3
9.5
MĂ€lu kasutamine (Mb):
Konfiguratsioon
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Traditsiooniline pilvepÔhine kuhi*
140
218
Improviseeriv, ei ole nii?
*Selle tehnoloogiakuhja kohta mul teavet ei leidunud, vÔime arvata, et see on mingi Spring Boot koos tÀiendava varustusega..
Tere maailm!
KÔige lihtsam rakendus, mis on kirjutatud Quarkuses, nÀeb vÀlja selline:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}See on tegelikult ĂŒks klass ja seda piisab! Rakendust saab kĂ€ivitada Maveniga arendusreĆŸiimis:
mvn compile quarkus:dev
âŠ
$ curl http://localhost:8080/hello
helloErinevus tavapĂ€rasest rakendusest â klassi Application ei ole! Quarkus toetab kuumlaadimist, nii et saate rakendust muuta, seda uuesti kĂ€ivitamata, muutes arendamise veelgi kiiremaks.
Mis edasi? Saate lisada teenuse kontrollerisse annotatsiooni abil . Teenuse kood:
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Tere " + 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
Tere arendaja!Pange tĂ€hele, et Quarkuses kasutatakse standardseid annotatsioone tuttavatest raamistikest â CDI ja JAX-RS. Uut ei ole vaja Ă”ppida, kui olete varem CDI ja JAX-RS-ga töötanud, muidugi.
Töö andmebaasiga
Kasutatakse Hibernate'i ja standardseid JPA annotatsioone entiteetide jaoks. Nii nagu REST kontrollerite puhul, on vajalik kirjutada minimaalset koodi. Piisab, kui mÀrkida sÔltuvused koostamisfailis ja lisada annotatsioonid. @Entity ja konfigureerida datasource failis application.properties.
KÔik. Ei mingit sessionFactory, persistence.xml ega muid teenusfailide. Kirjutame ainult seda koodi, mis on vajalik. Siiski, vajadusel on vÔimalik luua fail persistence.xml ja tÀpsemalt konfigureerida ORM kihti.
Quarkus toetab entiteetide, ĂŒhe- ja mitme vaheliste suhete kogude ning pĂ€ringute vahemĂ€lastust. Esmapilgul tundub see suurepĂ€rane, kuid see on lokaalne vahemĂ€lu, ĂŒhe Kubernetes'i sĂ”lme jaoks. See tĂ€hendab, et erinevate sĂ”lmede vahemĂ€lud ei ole ĂŒksteisega sĂŒnkroniseeritud. Loodan, et see on ajutine.
AsĂŒnkroonne koodi tĂ€itmine
Nagu eespool mainitud, toetab Quarkus ka reaktiivset programmeerimisstiili. Eelmise rakenduse koodi saab kirjutada teises vormis.
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/{name}")
public CompletionStage greeting(@PathParam("name") String name) {
return CompletableFuture.supplyAsync(() -> {
return "Hello " + name + "!";
});
}
}AsĂŒnkroonne kood saab samuti teenusesse viia, tulemus on sama.
Testimine
Quarkus rakenduste teste saab kirjutada JUnit4 vÔi JUnit5 abil. Allpool on toodud nÀide endpoint'i testist, see on kirjutatud RestAssured abil, kuid vÔib kasutada 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 + "!"));
}
}Annotatsioon @QuarkusTest nÀeb ette rakenduse kÀivitamise enne testide tegemist. Muus osas - tuttav kood kÔikidele arendajatele.
Platvormist sÔltuv rakendus
Kuna Quarkus on tihedalt integreeritud GraalVM-iga, on loomulikult vÔimalik genereerida platvormist sÔltuvat koodi. Selleks tuleb installida GraalVM ja mÀÀrata keskkonnamuutuja GRAALVM_HOME. Edasi ja mÀÀrata see rakenduse koostamisel:
mvn package -PnativeHuvitav, et genereeritud rakendust saab testida. See on oluline, kuna ânatiivkoodiâ tĂ€itmine vĂ”ib erineda JVM-is toimuvast. Annotatsioon @SubstrateTest kĂ€ivitab rakenduse platvormist sĂ”ltuva koodi. Olemasolevaid testikoodide taaskasutatakse pĂ€rimise kaudu, mistĂ”ttu platvormist sĂ”ltuva rakenduse testimise kood nĂ€eb vĂ€lja selline:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}Genereeritud pilt saab pakendada Dockerisse ja kĂ€ivitada Kuberneteses vĂ”i OpenShiftis, nagu on ĂŒksikasjalikult kirjeldatud .
Tööriistakomplekt
Quarkus raamistikku saab kasutada koos Maven ja Gradleiga. Mavenit toetatakse tĂ€ielikult, erinevalt Gradlest. Kahjuks ei toeta Gradle praegu tĂŒhja projekti genereerimist, veebisaidil on olemas ĂŒksikasjalikud .
Lisandused
Quarkus on laiendatav raamistik. Praegu on olemas umbes , mis lisavad erinevat funktsionaalsust â alates ja kuni logimise ja töödes olevate teenuste mÔÔdikute avaldamiseni. Juba on olemas ka laiendus Kotlinis rakenduste kirjutamise toetamiseks, lisaks Java-le.
KokkuvÔte
Minu arvates on Quarkus tĂ€iesti ajakohane. Backend-koodi arendamine muutub ĂŒha lihtsamaks ja see raamistik lihtsustab ja kiirendab teenuste arendust, pakkudes ânatiivsetâ tuge Dockerile ja Kubernetes'ile. Suur pluss on GraalVM-i ja platvormist sĂ”ltuvate piltide genereerimise sisemine tugi, mis vĂ”imaldab teenustel olla tĂ”eliselt kiiresti kĂ€ivituvad ja vĂ€he mĂ€lu kasutavad. See on tĂ€napĂ€eva mikroteenuste ja serverita arhitektuuri ajastul ÀÀrmiselt oluline.
Ametlik veebisait â . KiirkĂ€ivitamiseks on juba olemas projektide nĂ€ited .
Allikas: habr.com
