Quarkus — ĂŒleheliline subatomaarne Java. Raamistiku lĂŒhike ĂŒlevaade

Quarkus — ĂŒleheliline subatomaarne Java. Raamistiku lĂŒhike ĂŒlevaade

Sissejuhatus

Seitsmenda mĂ€rtsil teatas RedHat (peagi IBM) esitles uus raamistik — Quarkus. 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 seda 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
hello

Erinevus 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 SĂŒstimine. 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 tuleb kirjutada koostamisprofiil ja mÀÀrata see rakenduse koostamisel:

mvn package -Pnative

Huvitav, 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 juhendis.

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 Ă”pikule.

Lisandused

Quarkus on laiendatav raamistik. Praegu on olemas umbes 40 laiendust, mis lisavad erinevat funktsionaalsust – alates Spring DI konteinersist ja Apache Camel 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 — quarkus.io. KiirkĂ€ivitamiseks on juba olemas projektide nĂ€ited GitHub.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster