Quarkus ndi supersonic subatomic Java. Chidule chachidule cha chimango

Quarkus ndi supersonic subatomic Java. Chidule chachidule cha chimango

Mau oyamba

Pa Marichi XNUMX, RedHat (posachedwa IBM) прСдставила chimango chatsopano - quarkus. Malinga ndi omwe akupanga, chimangochi chimachokera ku GraalVM ndi OpenJDK HotSpot ndipo adapangidwira Kubernetes. Mulu wa Quarkus umaphatikizapo: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus ndi ena.

Cholinga ndikupangitsa Java kukhala nsanja yotsogola pakutumiza kwa Kubernetes komanso chitukuko cha pulogalamu yopanda seva, kupatsa otukula njira yolumikizana yachitukuko mumitundu yonse yokhazikika komanso yofunikira.

Ngati muyang'ana izi Kugawika kwa ma frameworks, ndiye Quarkus ili penapake pakati pa "Aggregators/Code Generators" ndi "High-level fullstack frameworks". Izi ndizambiri kuposa zophatikiza, koma sizimafika podzaza, chifukwa ... okonzedwa kuti backend chitukuko.

Kuthamanga kwambiri koyambitsa ntchito komanso kugwiritsa ntchito kukumbukira kochepa kumalonjezedwa. Nayi zomwe zachokera patsamba la wopanga:

Nthawi kuyambira koyambira mpaka kuyankha koyamba (m):

Kukhazikika
Bwerani
REST + JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Traditional Cloud Native Stack*
4.3
9.5

Kugwiritsa ntchito kukumbukira (Mb):

Kukhazikika
Bwerani
REST + JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Traditional Cloud Native Stack*
140
218

Zochititsa chidwi, sichoncho?

*Sindinapeze chidziwitso chilichonse chokhudza ukadaulo uwu, titha kuganiza kuti uwu ndi mtundu wina wa Spring Boot wokhala ndi zida zowonjezera zathupi..

Moni Dziko Lapansi!

Kugwiritsa ntchito kosavuta kolembedwa mu Quarkus kungawoneke motere:

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

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

Ndi kalasi imodzi ndipo ndi zokwanira! Mutha kuyendetsa pulogalamuyi pogwiritsa ntchito Maven mumayendedwe achitukuko:

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

Kusiyanitsa ndi kugwiritsa ntchito nthawi zonse ndikuti palibe kalasi ya Application! Quarkus imathandizira kutsitsanso kotentha, kotero mutha kusintha pulogalamu yanu osayiyambitsanso, ndikupanga chitukuko mwachangu.

Chotsatira ndi chiyani? Mutha kuwonjezera ntchito kwa wowongolera pogwiritsa ntchito mawu ofotokozera Lowani. Service kodi:

@ApplicationScoped
public class GreetingService {

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

Wowongolera:

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

Zindikirani kuti Quarkus amagwiritsa ntchito zofotokozera zamtundu wodziwika bwino - CDI ndi JAX-RS. Palibe chifukwa chophunzirira chatsopano ngati mudagwirapo ntchito ndi CDI ndi JAX-RS m'mbuyomu, inde.

Kugwira ntchito ndi database

Hibernate ndi zofotokozera za JPA zamagulu zimagwiritsidwa ntchito. Monga ndi olamulira a REST, muyenera kulemba ma code osachepera. Ndikokwanira kusonyeza kudalira mu fayilo ya msonkhano, onjezerani ndemanga @Entity ndi kukonza datasource mu application.properties.

Zonse. Palibe sessionFactory, persistence.xml kapena mafayilo ena othandizira. Timalemba code yomwe ikufunika. Komabe, ngati kuli kofunikira, mutha kupanga fayilo ya persistence.xml ndikusintha gawo la ORM bwino kwambiri.

Quarkus imathandizira kusungitsa mabungwe, zosonkhanitsira maubwenzi amodzi ndi ambiri, ndi mafunso. Poyang'ana koyamba zikuwoneka bwino, koma ndizo kwanuko caching, pa mfundo imodzi ya Kubernetes. Iwo. Ma cache a ma node osiyanasiyana samalumikizidwa wina ndi mnzake. Ndikukhulupirira kuti izi ndi zakanthawi.

Asynchronous code execution

Monga tafotokozera pamwambapa, Quarkus imathandiziranso kalembedwe kameneka. Khodi ya pulogalamu yam'mbuyomu ikhoza kulembedwa mwanjira ina.

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

Khodi ya Asynchronous imathanso kusamutsidwa ku utumiki, zotsatira zake zidzakhala zofanana.

Kuyesa

Mayeso a mapulogalamu a Quarkus amatha kulembedwa mu JUnit4 kapena JUnit5. Pansipa pali chiyeso chakumapeto, chalembedwa pogwiritsa ntchito RestAssured, koma chimango china chingagwiritsidwe ntchito:

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

Ndemanga ya @QuarkusTest imakulangizani kuyendetsa pulogalamu musanayese mayeso. Zina zonse ndizodziwika kwa onse opanga mapulogalamu.

Kugwiritsa ntchito papulatifomu

Popeza Quarkus imaphatikizidwa mwamphamvu ndi GraalVM, ndizotheka kupanga code yeniyeni ya pulatifomu. Kuti muchite izi, muyenera kukhazikitsa GraalVM ndikutchula GRAALVM_HOME zosinthika zachilengedwe. Komanso lembetsani mbiri kuti musonkhe ndipo tchulani pomanga pulogalamuyo:

mvn package -Pnative

Chochititsa chidwi n'chakuti, pulogalamu yopangidwa ikhoza kuyesedwa. Ndipo izi ndi zofunika chifukwa kuphedwa kwa code komweko kumatha kusiyana ndi kuphedwa pa JVM. Ndemanga za @SubstrateTest zimakhala ndi khodi yapapulatifomu. Kugwiritsanso ntchito mayeso omwe alipo kale kutha kuchitidwa pogwiritsa ntchito cholowa; Zotsatira zake, code yoyesa pulogalamu yodalira nsanja idzawoneka motere:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Chithunzi chopangidwa chitha kupakidwa mu Docker ndikuyendetsa Kubernetes kapena OpenShift, yofotokozedwa mwatsatanetsatane malangizo.

Chida

Mapangidwe a Quarkus angagwiritsidwe ntchito ndi Maven ndi Gradle. Maven amathandizidwa kwathunthu, mosiyana ndi Gradle. Tsoka ilo, pakadali pano Gradle sichikuthandizira kupanga pulojekiti yopanda kanthu; pali zambiri zatsatanetsatane patsamba zolemba.

Zowonjezera

Quarkus ndi chimango chowonjezera. Panopa pali dongosolo 40 zowonjezera, zomwe zimawonjezera magwiridwe antchito osiyanasiyana - kuchokera ku chithandizo Chidebe cha Spring DI ΠΈ Apache Camel musanalowe ndi kusindikiza ma metric oyendetsa ntchito. Ndipo pali kale chowonjezera chothandizira kulemba zolemba ku Kotlin, kuwonjezera pa Java.

Pomaliza

Malingaliro anga, Quarkus imagwirizana kwambiri ndi zomwe zikuchitika panthawiyo. Kupanga ma code backend kukukhala kosavuta komanso kosavuta, ndipo chimangochi chimathandizira ndikufulumizitsa chitukuko cha ntchito powonjezera chithandizo chamtundu wa Docker ndi Kubernetes. Chowonjezera chachikulu ndikuthandizira kwa GraalVM komanso kupanga zithunzi zotengera nsanja, zomwe zimalola kuti mautumiki ayambe mwachangu komanso kutenga malo okumbukira pang'ono. Ndipo izi ndizofunikira kwambiri munthawi yathu yokonda kwambiri ma microservices ndi zomangamanga zopanda seva.

Tsamba lovomerezeka - quarkus.io. Zitsanzo zamapulojekiti oyambira mwachangu zilipo kale GitHub.

Source: www.habr.com

Kuwonjezera ndemanga