Quarkus waa Java subatomic supersonic. Dulmar kooban oo ku saabsan qaabka

Quarkus waa Java subatomic supersonic. Dulmar kooban oo ku saabsan qaabka

Horudhac

Maarso XNUMX-deedii, RedHat (dhowaan IBM) soo bandhigay qaab cusub - quruus. Marka loo eego horumariyayaashu, qaabkani wuxuu ku salaysan yahay GraalVM iyo OpenJDK HotSpot waxaana loogu talagalay Kubernetes. Xirmada Quarkus waxaa ka mid ah: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus iyo kuwa kale.

Hadafka ayaa ah in Java laga dhigo hormuudka ugu horreeya ee keenista Kubernetes iyo horumarinta codsiyada server-la'aanta, iyada oo la siinayo horumariyeyaasha hab midaysan oo horumarinta hababka falcelinta iyo lama huraanka ah labadaba.

Hadii aad eegto tan kala soocidda qaab-dhismeedka, ka dib Quarkus waa meel u dhaxaysa "Aggregators/Code Generators" iyo "Heer-High High Stack frameworks". Tani mar horeba way ka badan tahay isku-darka, laakiin xitaa ma gaadho xidhmo buuxa, sababtoo ah... loogu talagalay horumarinta dhabarka dambe.

Xawaaraha aadka u sarreeya ee furitaanka codsiga iyo isticmaalka xusuusta hooseeya ayaa la ballanqaaday. Waa kan xogta laga helay mareegta horumariyaha:

Laga bilaabo bilawga ilaa jawaabta koowaad:

Qaabeynta
REST
Naso+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Xirmooyinka Dhaladka ah ee Cloud*
4.3
9.5

Isticmaalka xusuusta (Mb):

Qaabeynta
REST
Naso+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Xirmooyinka Dhaladka ah ee Cloud*
140
218

La yaab leh, miyaanay ahayn?

*Ma helin wax macluumaad ah oo ku saabsan xirmadan tignoolajiyada, waxaan u qaadan karnaa in tani ay tahay nooc ka mid ah Bootka Guga oo leh qalab dheeri ah.

Waad salaaman tihiin!

Codsiga ugu fudud ee lagu qoray Quarkus wuxuu u ekaan lahaa sidan:

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String hello() {
       return "hello";
   }
}

Runtii waa hal fasal waana ku filan tahay! Waxaad ku socodsiin kartaa arjiga adigoo isticmaalaya Maven qaabka horumarinta:

mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello

Farqiga u dhexeeya codsiga caadiga ah ayaa ah in aanu jirin fasalka codsiga! Quarkus waxay taageertaa dib-u-celinta kulul, si aad u beddesho codsigaaga adigoon dib u bilaabin, samaynta horumarka xitaa si dhakhso ah.

Maxaa xiga? Waxaad ku dari kartaa adeeg kontaroolaha adiga oo isticmaalaya sharraxaad Durid. Koodhka adeegga:

@ApplicationScoped
public class GreetingService {

   public String greeting(String name) {
       return "Hello " + name + "!";
   }
}

Xakameeyaha:

@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!

Ogsoonow in Quarkus uu isticmaalo tilmaamo caadi ah oo ka yimid qaab-dhismeedka la yaqaan - CDI iyo JAX-RS. Looma baahna inaad barato wax cusub haddii aad horay ula soo shaqeysay CDI iyo JAX-RS, dabcan.

La shaqaynta xogta xogta

Hibernate iyo jaangooyooyinka caadiga ah ee JPA ee hay'adaha ayaa la isticmaalaa. Sida kantaroolayaasha REST, waxaad u baahan tahay inaad qorto ugu yaraan kood. Waa ku filan tahay in la tilmaamo ku-tiirsanaanta faylka golaha, ku dar faallooyin @Entity oo u habeeya ilaha xogta ee Application.properties.

Dhammaan Ma jiro warshad fadhi, adkaysi.xml ama faylal kale oo adeeg ah. Waxaan qornaa oo kaliya koodka loo baahan yahay. Si kastaba ha noqotee, haddii loo baahdo, waxaad abuuri kartaa faylka persistence.xml oo aad u habeyn kartaa lakabka ORM si aad u fiican.

Quarkus waxa ay taageertaa kaydinta hay'adaha, ururinta xidhiidhada hal-ilaa-badan, iyo waydiimaha. Jaleecada hore waxay u egtahay mid weyn, laakiin waa deegaanka kaydinta, hal kubernetes noode. Kuwaas. Xirmooyinka qanjidhada kala duwan iskuma wada shaqeeyaan. Waxaan rajeynayaa in tani ay tahay mid ku meel gaar ah.

Fulin kood aan asynchronous

Sida kor ku xusan, Quarkus sidoo kale wuxuu taageeraa habka barnaamijka falcelinta. Koodhka codsigii hore waxa loo qori karaa qaab kale.

@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 + "!";
       });
   }
}

Koodhka Asynchronous sidoo kale waxaa loo wareejin karaa adeegga, natiijadu waxay noqon doontaa isku mid.

Imtixaanka

Imtixaanada codsiyada Quarkus waxa lagu qori karaa JUnit4 ama JUnit5. Hoos waxaa ku yaal tusaale tusaale u ah barta dhamaadka, waxaa lagu qoray iyadoo la isticmaalayo RestAssured, laakiin qaab kale ayaa la isticmaali karaa:

@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 + "!"));
   }
}

Sharaxaada @QuarkusTest ayaa ku faraya inaad socodsiiso arjiga ka hor inta aanad imtixaanada samayn. Inta soo hartay waa kood ay yaqaanaan dhammaan horumariyeyaasha.

Codsiga u gaarka ah Platform

Maadaama Quarkus uu si adag ugu dhex milmay GraalVM, dabcan waa suurtogal in la soo saaro kood u gaar ah madal. Si tan loo sameeyo, waxaad u baahan tahay inaad ku rakibto GraalVM oo aad qeexdo doorsoomiyaha deegaanka GRAALVM_HOME. Dheeraad ah diiwaan geli profile ah shirka oo sheeg marka la dhisayo codsiga:

mvn package -Pnative

Waxa xiiso leh, codsiga la sameeyay waa la tijaabin karaa. Tanina waa muhiim sababtoo ah fulinta koodka asalka ahi wuu ka duwanaan karaa fulinta JVM. Sharaxaada @SubstrateTest waxa ay waddaa koodka codsiga madal-gaar ah. Dib u adeegsiga koodka imtixaanka jira waxaa lagu samayn karaa iyadoo la adeegsanayo dhaxalka; Natiijo ahaan, koodhka tijaabinta arjiga ku-tiirsanaanta wuxuu u ekaan doonaa sidan:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Sawirka la sameeyay waxaa lagu baakadeysan karaa Docker waxaana lagu socodsiin karaa Kubernetes ama OpenShift, oo si faahfaahsan loogu sharraxay tilmaamaha.

Qalabka Qalabka

Qaabka Quarkus waxaa loo isticmaali karaa Maven iyo Gradle. Maven si buuxda ayaa loo taageeraa, si ka duwan Gradle. Nasiib darro, hadda Gradle ma taageerayo abuurista mashruuc madhan; waxaa jira macluumaad faahfaahsan oo ku yaal mareegaha buugga qoraalka.

Kordhinta

Quarkus waa qaab-dhismeed la fidin karo. Hadda waxaa jira dalab 40 kordhin, kuwaas oo ku dara waxqabadyo kala duwan - taageero Weelka guga DI ΠΈ Geela Apache ka hor inta aanad qorin oo daabicin cabbirada adeegyada socodsiinta. Waxaana horay u jiray kordhin lagu taageerayo qorista codsiyada gudaha Kotlin, marka lagu daro Java.

gunaanad

Fikradayda, Quarkus wuxuu la jaan qaadayaa isbeddellada waqtiga. Kobcinta koodhka dhabarka ayaa noqda mid sahlan oo sahlan, qaabkanina wuxuu sii fududeynayaa oo dedejiyaa horumarinta adeegga isagoo ku daraya taageerada hooyo ee Docker iyo Kubernetes. A weyn oo lagu daray waa ku-dhismay taageero GraalVM iyo jiilka sawirada madal-ku-tiirsane, kaas oo u ogolaanaya adeegyada in ay si degdeg ah u bilaabaan oo ay qaataan meel xusuusta yar. Waxayna tani aad muhiim ugu tahay waqtigeena xamaasadda ballaaran ee loogu talagalay adeeg-yaraha iyo qaab-dhismeedka server-la'aanta.

Goobta rasmiga ah - qurkus.io. Tusaalooyinka mashaariicda ee bilowga degdegga ah ayaa horeba loo heli karaa GitHub.

Source: www.habr.com

Add a comment