Quarkus Javayek subatomî ya supersonîk e. Bi kurtî li ser çarçoveyê

Quarkus Javayek subatomî ya supersonîk e. Bi kurtî li ser çarçoveyê

Pîrozbahiyê

Di XNUMX-ê Adarê de, RedHat (zû IBM) pêşkêş kirin çarçoveya nû - quarkus. Li gorî pêşdebiran, ev çarçove li ser GraalVM û OpenJDK HotSpot-ê ye û ji bo Kubernetes hatî çêkirin. Stack Quarkus ev in: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus û yên din.

Armanc ev e ku Java bibe platforma pêşeng ji bo bicihkirina Kubernetes û pêşkeftina serîlêdana bê server, ji pêşdebiran re nêzîkatiyek yekgirtî ya pêşkeftinê hem di şêwazên reaktîf û hem jî mecbûrî de peyda dike.

Dinêre ev tesnîfkirina çarçoweyan, wê hingê Quarkus deverek di navbera "Aggregators / Generatorên Kodê" û "Çarçoveyên fullstack-asta Bilind" de ye. Ev jixwe ji berhevkarek wêdetir e, lê ew nagihîje tam-stackê jî, ji ber ... ji bo pêşkeftina paşîn ve hatî çêkirin.

Leza pir zêde ya destpêkirina serîlêdanê û mezaxtina bîra kêm tê soz kirin. Li vir daneyên ji malpera pêşdebirker e:

Dem ji destpêkê heya bersiva yekem (s):

Guhertin
REHETÎ
REST + JPA

Quarkus + GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Cloud Native Stack*
4.3
9.5

Vexwarina bîranînê (Mb):

Guhertin
REHETÎ
REST + JPA

Quarkus + GraalVM
13
35

Quarkus+OpenJDK
74
130

Cloud Native Stack*
140
218

Balkêş e, ne wusa?

*Min di derheqê vê stoka teknolojiyê de ti agahdarî nedît, em dikarin texmîn bikin ku ev celebek Boota Biharê ye ku bi kîtek laşê zêde ye.

Hello World!

Serîlêdana herî hêsan a ku li Quarkus hatî nivîsandin dê bi vî rengî xuya bike:

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

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

Bi rastî yek pola ye û bes e! Hûn dikarin serîlêdanê bi karanîna Maven di moda pêşkeftinê de bimeşînin:

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

Cûdahiya ji serîlêdana birêkûpêk ev e ku pola Serlêdanê tune! Quarkus ji nûvekirina germ piştgirî dike, ji ber vê yekê hûn dikarin serîlêdana xwe bêyî destpêkirina wê biguhezînin, pêşveçûnê hîn zûtir bikin.

Pêşî çi ye? Hûn dikarin bi karanîna annotasyonê karûbarek li kontrolkerek zêde bikin Derzîkirin. Koda xizmetê:

@ApplicationScoped
public class GreetingService {

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

Kontrolker:

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

Bala xwe bidinê ku Quarkus annotasyonên standard ji çarçoveyên naskirî - CDI û JAX-RS bikar tîne. Ger we berê bi CDI û JAX-RS re xebitîbe ne hewce ye ku hûn tiştek nû fêr bibin, bê guman.

Bi databasê re dixebitin

Hibernate û şîroveyên standard JPA ji bo saziyan têne bikar anîn. Mîna kontrolkerên REST, hûn hewce ne ku hindiktirîn kodê binivîsin. Bes e ku meriv pêwendiyan di pelê civînê de destnîşan bike, şîroveyan lê zêde bike @Entity û datasource di application.properties de mîheng bike.

Gişt. SesionFactory, persistence.xml an pelên karûbarê din tune. Em tenê koda ku hewce dike dinivîsin. Lêbelê, heke hewce be, hûn dikarin pelek persistence.xml biafirînin û qata ORM-ê bi hûrgulî mîheng bikin.

Quarkus cachkirina saziyan, berhevokên ji bo têkiliyên yek-bi-gelek, û pirsan piştgirî dike. Di nihêrîna pêşîn de ew pir xweş xuya dike, lê ew e herêmî caching, ji ​​bo yek girêk Kubernetes. Ewan. Kevirên girêkên cihêreng bi hevûdu re ne hevdemkirî ne. Ez hêvî dikim ku ev demkî ye.

Darvekirina koda asynchronous

Wekî ku li jor behs kir, Quarku di heman demê de şêwaza bernameya reaktîf jî piştgirî dike. Koda serîlêdana berê dikare bi rengek cûda were nivîsandin.

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

Koda asynchronous jî dikare ji karûbar re were veguheztin, encam dê heman be.

Îmtîhanê

Testên ji bo serîlêdanên Quarkus dikarin di JUnit4 an JUnit5 de bêne nivîsandin. Li jêr ceribandinek mînakek ji bo xalek dawî ye, ew bi karanîna RestAssured hatî nivîsandin, lê çarçoveyek din dikare were bikar anîn:

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

Şîrovekirina @QuarkusTest ji we re rê dide ku hûn berî ceribandinan serîlêdanê bimeşînin. Ya mayî kodek e ku ji hemî pêşdebiran re nas e.

Serlêdana platform-taybet

Ji ber ku Quarkus bi GraalVM-ê re zexm ve girêdayî ye, bê guman gengaz e ku koda platformê-taybetî biafirîne. Ji bo vê yekê, hûn hewce ne ku GraalVM saz bikin û guhêrbara jîngehê GRAALVM_HOME diyar bikin. Berdewam profîlek ji bo civînê tomar bikin û dema ku serîlêdanê çêbikin wê diyar bikin:

mvn package -Pnative

Balkêş e, serîlêdana hatî çêkirin dikare were ceribandin. Û ev girîng e ji ber ku darvekirina koda xwemalî dibe ku ji darvekirina li ser JVM cûda bibe. Şîrovekirina @SubstrateTest koda serîlêdanê ya platform-taybet dimeşîne. Ji nû ve karanîna koda testê ya heyî dikare bi karanîna mîrasiyê were kirin; Wekî encamek, koda ceribandina serîlêdana girêdayî platformê dê bi vî rengî xuya bike:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Wêneyê hatî hilberandin dikare li Docker were pak kirin û di Kubernetes an OpenShift de were xebitandin, bi hûrgulî li fermanên.

Amûr

Çarçoveya Quarkus dikare bi Maven û Gradle re were bikar anîn. Maven bi tevahî piştgirî ye, berevajî Gradle. Mixabin, niha Gradle piştgirî nade çêkirina projeyek vala; li ser malperê agahdariya berfireh heye pirtûka pirtûkê.

Extensions

Quarkus çarçoveyek berfirehkirî ye. Niha fermanek heye 40 dirêjkirin, ku fonksiyonên cihêreng lê zêde dikin - ji piştgirî Bihar DI konteynir и Apache Camel berî têketin û weşandina metrîkên ji bo karûbarên xebitandinê. Û jixwe dirêjkirinek heye ku piştgirî bide serîlêdanên nivîsandinê li Kotlin, ji bilî Java.

encamê

Bi dîtina min, Quarkus bi meylên demê re pir li hev e. Pêşveçûna koda paşerojê hêsantir û hêsantir dibe, û ev çarçove bi lê zêdekirina piştevaniya xwemalî ya ji bo Docker û Kubernetes re pêşkeftina karûbarê hêsantir dike û bileztir dike. Pîvanek mezin piştgirîya çêkirî ya ji bo GraalVM û hilberîna wêneyên girêdayî platformê ye, ku dihêle karûbar bi rastî zû dest pê bikin û cîhê bîranîna piçûk bigirin. Û ev di dema meya dilşewatiya girseyî ya ji bo mîkroxizmet û mîmariya bê server de pir girîng e.

Malpera fermî - quarkus.io. Mînakên projeyên ji bo destpêkek bilez jixwe li ser hene GitHub.

Source: www.habr.com

Add a comment