
Sissejuhatus
Seitsmendal mĂ€rtsil kuulutas RedHat (varsti â IBM) vĂ€lja uue raamistikku â . Arendajate sĂ”nul pĂ”hineb see raamistik GraalVM-il ja OpenJDK HotSpotil ning on mĂ”eldud Kubernetes'ile. Quarkuse tehnoloogiakuhja kuuluvad: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus ja teised.
Selle loomise eesmĂ€rk on muuta Java juhtivaks platvormiks Kubernetes'esse juurutamiseks ja serverless rakenduste arendamiseks, pakkudes arendajatele ĂŒhtset lĂ€henemist nii reaktiivses kui ka imperatiivsest stiilis arendamiseks.
Kui vaadata raamistike klassifikatsiooni, siis Quarkus asub kuskil 'Ahnurite/Koodi genereerijate' ja 'KÔrgetasemeliste tÀisteenindusraamistike' vahel. See on rohkem kui ahnur, kuid ei ulatu tÀisteeninduseni, kuna on suunatud backend arendusele.
Lubatakse vÀga kÔrget rakenduse kÀivituskiirus ja madal mÀlu tarbimine. Siin on arendaja kodulehelt saadud andmed:
Aeg algusest esimesse vastusesse (s):
Konfiguratsioon
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Traditsiooniline pilve native tech stack*
4.3
9.5
MĂ€lu tarbimine (Mb):
Konfiguratsioon
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Traditsiooniline pilve native tech stack*
140
218
ImetlusvÀÀrne, kas pole?
*Selle tehnoloogiate kuhja kohta infot ei leidnud, vÔib eeldada, et tegemist on mÔne Spring Booti koos lisadega.
Hello World!
Lihtsaim rakendus, mis on kirjutatud Quarkuses, nÀeb vÀlja nii:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}See on tegelikult ĂŒks klass ja sellest piisab! Saate kĂ€ivitada rakenduse Maveniga arendusreĆŸiimis:
mvn compile quarkus:dev
âŠ
$ curl http://localhost:8080/hello
helloErinevus tavapÀrasest rakendusest on see, et ei ole klassi Application! Quarkus toetab kuumlaadimist, mistÔttu saate rakendust muuta, ilma et peaksite seda uuesti kÀivitama, mis kiirendab arendust veelgi.
Mis edasi? Saate lisada teenuse kontrollijale annotatsiooni abil . Teenuse kood:
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}Kontrollija:
@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 Quarkuses kasutatakse tuttavaid raamistike standardanotatsioone â CDI ja JAX-RS. Uut midagi Ă”ppida ei ole vaja, kui olete varem töötanud CDI ja JAX-RS-ga, muidugi.
Töö andmebaasiga
Hibernate'i ja standardsete JPA annotatsioonide kasutamine entiteetide jaoks. Nagu REST kontrollerite puhul, on vajalik kirjutada minimaalne kood. Piisab, kui mÀrkida sÔltuvused ehitust failis ja lisada annotatsioonid. @Entity ja konfigureerida andmeallikas application.properties failis.
KÔik. Ei mingeid sessionFactory'd, persistence.xml ega muid teenuse faile. Kirjutame ainult vajaliku koodi. Siiski, vajadusel on vÔimalik luua persistence.xml fail ja ORM-i kihti detailsemalt konfigureerida.
Quarkus toetab entiteetide, kogude ja ĂŒhe-mitmele suhete vahepealset vahemĂ€lu, samuti pĂ€ringuid. Esmapilgul tundub see suurepĂ€rane, kuid see on kohalik vahemĂ€lu, mis on mĂ”eldud ĂŒhe Kubernetes'i sĂ”lme jaoks. See tĂ€hendab, et erinevate sĂ”lmede vahemĂ€lud ei ole omavahel sĂŒnkroniseeritud. Loodan, et see on ajutine.
AsĂŒnkroonne koodi tĂ€itmine
Nagu eespool mainitud, toetab Quarkus ka reaktiivset programmeerimise stiili. Eelneva rakenduse kood on vÔimalik 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 "Tere " + name + "!";
});
}
}AsĂŒnkroonsed koodid saab samuti teenusesse viia, tulemuseks on sama.
Testimine
Quarkus-rakenduste teste saab kirjutada JUnit4 vÔi JUnit5. Allpool on toodud nÀide API testi kohta, mis on kirjutatud RestAssured'i abil, kuid vÔib kasutada ka teisi raamistikke:
@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("Tere " + uuid + "!"));
}
}Annotatsioon @QuarkusTest kĂ€seb kĂ€ivitada rakendus enne testide kĂ€ivitamist. ĂlejÀÀnud on tuttav kĂ”igile arendajatele kood.
Platvormist sÔltuv rakendus
Kuna Quarkus on tihedalt integreeritud GraalVM-iga, saab loomulikult genereerida platvormist sÔltuvat koodi. Selleks tuleb paigaldada GraalVM ja mÀÀrata keskkonnamuutuja GRAALVM_HOME. JÀrgmisena ja mÀÀrata see rakenduse ehitamisel:
mvn package -PnativeHuvitav on see, et genereeritud rakendust saab testida. See on oluline, kuna "natiivse" koodi tÀitmine vÔib erineda JVM-il töötamisest. Annotatsioon @SubstrateTest kÀivitab rakenduse platvormist sÔltuva koodi. Olemasolevat testikoodi saab kasutada pÀrimise kaudu, seega nÀeb platvormist sÔltuva rakenduse testimiskood vÀlja selline:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}Genereeritud pildi saab pakkida Dockerisse ja kĂ€ivitada Kuberneteses vĂ”i OpenShiftis, mille kohta on ĂŒksikasjalik kirjeldus .
Tööriistade komplekt
Raami Quarkus saab kasutada Maveniga ja Gradlega. Mavenit toetatakse tĂ€ielikult, erinevalt Gradlest. Kahjuks ei toeta Gradle praegu tĂŒhja projekti genereerimist, kodulehel on pĂ”hjalik .
Laiendid
Quarkus on laiendatav raamistik. Praegu on olemas umbes , mis lisavad erinevat funktsionaalsust â alates ja kuni logimise ja töötavate teenuste meetrikate avaldamiseni. Juba on olemas laiendus, mis toetab rakenduste kirjutamist Kotlinis, lisaks Java-le.
KokkuvÔte
Minu arvates on Quarkus tĂ€iesti ajakohane. Tagapere koodi arendamine muutub jĂ€rjest lihtsamaks ja see raamistik lihtsustab ning kiirendab teenuste arendamist veelgi, lisades ânatiivsetâ tuge Dockerile ja Kubernetesile. Suur eelis on integreeritud tugi GraalVM-ile ja platvormispetsiifiliste piltide genereerimisele, mis vĂ”imaldab teenuste kiiresti kĂ€ivituda ja hĂ”ivavad vĂ€he mĂ€lu. See on vĂ€ga oluline meie aja massilise mikroteenuste ja serveriteta arhitektuuri huvi juures.
Ametlik veebileht â . Kiire alguse projekti nĂ€ited on juba olemas .
Allikas: habr.com
