ʻO Quarkus kahi supersonic subbatomic Java. ʻO ka ʻike pōkole o ke kahua

ʻO Quarkus kahi supersonic subbatomic Java. ʻO ka ʻike pōkole o ke kahua

Hōʻike

Ma Malaki XNUMXth, RedHat (koke koke IBM) hōʻike ʻia hoʻolālā hou - ʻO Quarkus. Wahi a nā mea hoʻomohala, ua hoʻokumu ʻia kēia hoʻolālā ma GraalVM a me OpenJDK HotSpot a ua hoʻolālā ʻia no Kubernetes. Aia ka Quarkus stack: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus a me nā mea ʻē aʻe.

ʻO ka pahuhopu e hoʻolilo iā Java i kahua alakaʻi no ka hoʻolaha ʻana o Kubernetes a me ka hoʻomohala ʻana i nā noi serverless, e hāʻawi ana i nā mea hoʻomohala i kahi ala hoʻomohala i ka hoʻomohala ʻana i nā ʻano reactive a imperative.

Inā ʻoe e nānā kēia ka hoʻokaʻawale ʻana o nā frameworks, a laila aia ʻo Quarkus ma waena o "Aggregators / Code Generators" a me "High-level fullstack frameworks". ʻOi aku kēia ma mua o kahi aggregator, akā ʻaʻole hiki i ka piha piha, no ka mea i hana ʻia no ka hoʻomohala ʻana i hope.

Kiʻekiʻe loa ka wikiwiki o ka hoʻomaka ʻana o ka noi a me ka hoʻohana haʻahaʻa hoʻomanaʻo. Eia ka ʻikepili mai ka punaewele o ka mea hoʻomohala:

Ka manawa mai ka hoʻomaka a hiki i ka pane mua (s):

Kauoa
koena
HOOMAHA+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Puʻupuʻu Kapua Kuʻuna Native*
4.3
9.5

Hoʻohana hoʻomanaʻo (Mb):

Kauoa
koena
HOOMAHA+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Puʻupuʻu Kapua Kuʻuna Native*
140
218

Kahaha, 'a'ole anei?

*ʻAʻole i loaʻa iaʻu kekahi ʻike e pili ana i kēia ʻenehana ʻenehana, hiki iā mākou ke manaʻo he ʻano Spring Boot kēia me kahi pahu kino hou..

Hello Aloha!

ʻO ka palapala noi maʻalahi i kākau ʻia ma Quarkus e like me kēia:

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

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

Hoʻokahi papa maoli ia a ua lawa kēlā! Hiki iā ʻoe ke holo i ka noi me ka hoʻohana ʻana iā Maven i ke ʻano hoʻomohala:

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

ʻO ka ʻokoʻa mai kahi noi maʻamau ʻaʻohe papa noi! Kākoʻo ʻo Quarkus i ka hoʻouka hou ʻana, no laila hiki iā ʻoe ke hoʻololi i kāu noi me ka ʻole o ka hoʻomaka hou ʻana, e ʻoi aku ka wikiwiki o ka hoʻomohala ʻana.

He aha ka hope? Hiki iā ʻoe ke hoʻohui i kahi lawelawe i kahi kaohi me ka hoʻohana ʻana i kahi annotation Kākuhi. Code lawelawe:

@ApplicationScoped
public class GreetingService {

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

Mea hooponopono:

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

E hoʻomanaʻo e hoʻohana ʻo Quarkus i nā annotation maʻamau mai nā frameworks maʻamau - CDI a me JAX-RS. ʻAʻohe pono e aʻo i kahi mea hou inā ua hana ʻoe me CDI a me JAX-RS ma mua, ʻoiaʻiʻo.

Ke hana nei me ka waihona

Hoʻohana ʻia nā hōʻike hibernate a me JPA maʻamau no nā hui. E like me nā mea hoʻokele REST, pono ʻoe e kākau i kahi helu liʻiliʻi. Ua lawa ia e hōʻike i nā hilinaʻi i ka faila hui, hoʻohui i nā annotations @Entity a hoʻonohonoho i ka ʻikepili ma application.properties.

ʻO nā mea a pau. ʻAʻohe sessionFactory, persistence.xml a i ʻole nā ​​faila lawelawe ʻē aʻe. Kākau mākou i ke code e pono ai. Eia nō naʻe, inā pono, hiki iā ʻoe ke hana i kahi faila persistence.xml a hoʻonohonoho maikaʻi i ka papa ORM.

Kākoʻo ʻo Quarkus i ka mālama ʻana i nā hui, nā hōʻiliʻili no nā pilina hoʻokahi-a-nui, a me nā nīnau. I ka nānā mua ʻana he nani ia, akā ʻo ia kūloko caching, no hoʻokahi node Kubernetes. ʻO kēlā mau. ʻAʻole i hui pū ʻia nā huna o nā node like ʻole me kekahi. Manaʻo wau he manawa pōkole kēia.

Hoʻokō code Asynchronous

E like me ka mea i ʻōlelo ʻia ma luna, kākoʻo pū ʻo Quarkus i ke ʻano papahana reactive. Hiki ke kākau ʻia ke code o ka noi mua ma kahi ʻano ʻokoʻa.

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

Hiki ke hoʻololi ʻia ke code Asynchronous i ka lawelawe, e like ka hopena.

Hoʻoponopono

Hiki ke kākau ʻia nā hoʻokolohua no nā noi Quarkus ma JUnit4 a i ʻole JUnit5. Aia ma lalo kahi hōʻike hoʻohālike no kahi hopena, ua kākau ʻia me ka RestAssured, akā hiki ke hoʻohana ʻia kahi ʻano hana ʻē aʻe:

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

Aʻo ka @QuarkusTest annotation iā ʻoe e holo i ka noi ma mua o ka holo ʻana i nā hoʻokolohua. ʻO ke koena he code i kamaʻāina i nā mea hoʻomohala āpau.

Papahana kiko'ī

No ka mea ua hoʻopili paʻa ʻia ʻo Quarkus me GraalVM, ʻoiaʻiʻo nō hiki ke hana i nā code kikoʻī platform. No ka hana ʻana i kēia, pono ʻoe e hoʻokomo iā GraalVM a kuhikuhi i ka GRAALVM_HOME hoʻololi kaiapuni. Eia hou aku hoʻopaʻa inoa no ka hui ʻana a e kuhikuhi i ke kūkulu ʻana i ka noi:

mvn package -Pnative

ʻO ka mea hoihoi, hiki ke hoʻāʻo ʻia ka noi i hana ʻia. A he mea koʻikoʻi kēia no ka mea ʻokoʻa ka hoʻokō ʻana i ke code maoli mai ka hoʻokō ʻana ma ka JVM. Ka @SubstrateTest annotation e holo ana i ka helu palapala noi kahua kahua. Hiki ke hoʻohana hou ʻia ke code hoʻāʻo i kēia manawa me ka hoʻoilina; ʻo ka hopena, e like ke ʻano o ke code no ka hoʻāʻo ʻana i kahi noi e pili ana i ka platform:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Hiki ke hoʻopili ʻia ke kiʻi i hana ʻia ma Docker a holo i Kubernetes a i ʻole OpenShift, i wehewehe kikoʻī ʻia ma nā kuhikuhi.

Kākoʻo lāʻau

Hiki ke hoʻohana ʻia ka hana Quarkus me Maven a me Gradle. Kākoʻo piha ʻia ʻo Maven, ʻaʻole like me Gradle. ʻO ka mea pōʻino, i kēia manawa ʻaʻole kākoʻo ʻo Gradle i ka hana ʻana i kahi papahana ʻole; aia nā ʻike kikoʻī ma ka pūnaewele ʻolelo.

Hoʻohui

ʻO Quarkus kahi hoʻolālā hoʻonui. I kēia manawa aia kahi kauoha 40 hoʻonui, e hoʻohui i nā hana like ʻole - mai ke kākoʻo Puna DI ipu и Kamelo Apache ma mua o ka hoʻopaʻa inoa ʻana a me ka hoʻopuka ʻana i nā ana no ka holo ʻana i nā lawelawe. A aia kahi hoʻonui e kākoʻo i nā noi kākau ma Kotlin, me ka Java.

hopena

I koʻu manaʻo, ua kūpono ʻo Quarkus me nā ʻano o ka wā. E maʻalahi a maʻalahi ka hoʻomohala ʻana i nā code backend, a ua maʻalahi kēia ʻano hana a me ka wikiwiki i ka hoʻomohala lawelawe ma o ka hoʻohui ʻana i ke kākoʻo maoli no Docker a me Kubernetes. ʻO kahi hoʻohui nui ke kākoʻo i kūkulu ʻia no GraalVM a me ka hoʻokumu ʻana i nā kiʻi hilinaʻi platform, e hiki ai i nā lawelawe ke hoʻomaka koke a lawe i kahi wahi hoʻomanaʻo liʻiliʻi. A he mea koʻikoʻi kēia i ko mākou manawa makemake nui no nā microservices a me ka hoʻolālā serverless.

Paena kūhelu - quarkus.io. Loaʻa nā laʻana o nā papahana no ka hoʻomaka wikiwiki ʻana ma GitHub.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka