Ko Quarkus he Java subatomic supersonic. He tirohanga poto mo te angamahi

Ko Quarkus he Java subatomic supersonic. He tirohanga poto mo te angamahi

Whakataki

I te XNUMX o Poutū-te-rangi, RedHat (kua tata nei a IBM) представила anga hou - quarkus. E ai ki nga kaihanga, ko tenei anga kei runga i te GraalVM me te OpenJDK HotSpot ka hangaia mo Kubernetes. Kei roto i te puranga Quarkus: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus me etahi atu.

Ko te whainga kia waiho a Java hei turanga matua mo te tukunga Kubernetes me te whanaketanga tono kore-tumau, ma te whakarato ki nga kaiwhakawhanake he huarahi whakakotahi ki te whakawhanaketanga i roto i nga momo tauhohenga me nga momo mahi.

Ki te titiro koe ki tenei te whakarōpūtanga o nga anga, katahi ko Quarkus kei waenganui i nga "Aggregators/Waehere Generators" me "Nga anga taumata teitei". He nui ake tenei i te whakahiato, engari kaore e tae ki te taapu katoa, na te mea... he mea whakarite mo te whanaketanga o muri.

Ko te tere tere o te whakarewatanga o te tono me te iti o te kohi mahara kua oatihia. Anei nga raraunga mai i te paetukutuku a te kaiwhakawhanake:

Te wa mai i te timatanga ki te whakautu tuatahi:

Hōutuutu
te okiokinga
OTA+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Tāpae Kapua Māori tuku iho*
4.3
9.5

Te paunga mahara (Mb):

Hōutuutu
te okiokinga
OTA+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Tāpae Kapua Māori tuku iho*
140
218

He mea whakamiharo, ehara?

*Kaore au i kite i nga korero mo tenei puranga hangarau, ka taea e tatou te whakaaro he momo Spring Boot tenei me te kete tinana taapiri..

Kia Ora!

Ko te tono ngawari kua tuhia ki Quarkus ka penei te ahua:

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

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

Ko te tikanga kotahi te karaehe, kaati! Ka taea e koe te whakahaere i te tono ma te Maven i roto i te aratau whanaketanga:

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

Ko te rereke mai i te tono auau kaore he karaehe Tono! Ka tautokohia e Quarkus te uta wera, na reira ka taea e koe te whakarereke i to tono me te kore e timata ano, kia tere ake te whanaketanga.

He aha to muri mai? Ka taea e koe te taapiri i tetahi ratonga ki tetahi kaiwhakahaere ma te whakamahi i te tuhipoka Te weronga. Waehere ratonga:

@ApplicationScoped
public class GreetingService {

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

Kaiwhakahaere:

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

Kia mahara kei te whakamahi a Quarkus i nga korero paerewa mai i nga anga mohio - CDI me JAX-RS. Kaore he take ki te ako i tetahi mea hou mena kua mahi koe me CDI me JAX-RS i mua, o te akoranga.

Te mahi me te patengi raraunga

Ka whakamahia nga korero mokohanga me te JPA paerewa mo nga hinonga. Pērā i ngā pūmana REST, me tuhi koe i te iti o te waehere. He nui ki te tohu i nga whakawhirinakitanga i roto i te konae huihuinga, taapirihia nga korero @Entity me te whirihora i te puna raraunga i roto i te application.properties.

Katoa. Kaore he sessionFactory, persistence.xml me etahi atu konae ratonga. Ka tuhia e matou anake te waehere e hiahiatia ana. Heoi, ki te tika, ka taea e koe te hanga i tetahi konae persistence.xml me te whirihora i te paparanga ORM kia pai ake.

Ka tautokohia e Quarkus te keteroki o nga hinonga, nga kohinga mo nga hononga kotahi-ki-maha, me nga patai. I te titiro tuatahi he ahua pai, engari he pai rohe keteroki, mo te node Kubernetes kotahi. Ko era. Ko nga keteroki o nga pona rereke kaore i te tukutahi ki a raatau. Ko taku tumanako he wa poto tenei.

Te mahi waehere tukutahi

Ka rite ki te korero i runga ake nei, kei te tautoko ano a Quarkus i te momo hotaka reactive. Ko te waehere o te tono o mua ka taea te tuhi ki tetahi ahua rereke.

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

Ka taea hoki te whakawhiti i te waehere Asynchronous ki te ratonga, ka rite te hua.

Te whakamātautau

Ko nga whakamatautau mo nga tono Quarkus ka taea te tuhi ki JUnit4, JUnit5 ranei. Kei raro nei he tauira whakamatautau mo tetahi pito, ka tuhia ma te whakamahi RestAssured, engari ka taea te whakamahi i tetahi atu anga:

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

Ko te tuhipoka @QuarkusTest e tohutohu ana kia whakahaere koe i te tono i mua i te whakahaere i nga whakamatautau. Ko te toenga he waehere mohio ki nga kaihanga katoa.

Taupānga-motuhake

Mai i te mea kua honoa a Quarkus ki a GraalVM, ka taea pea te whakaputa i nga waehere motuhake mo te turanga. Hei mahi i tenei, me whakauru koe i te GraalVM me te tautuhi i te taurangi taiao GRAALVM_HOME. I tua atu rēhitatia he kōtaha mo te huihuinga ka whakapūtā i te wā e hanga ana i te tono:

mvn package -Pnative

He mea whakamiharo, ka taea te whakamatautau i te tono hanga. A he mea nui tenei na te mea ka rereke pea te mahinga o te waehere taketake mai i te mahi i runga i te JVM. Ko te tuhipoka @SubstrateTest e whakahaere ana i te waehere tono mo te turanga-motuhake. Ko te whakamahi ano i te waehere whakamatautau o naianei ka taea ma te whakamahi tuku iho; na reira, ka penei te ahua o te waehere mo te whakamatautau i tetahi tono e whakawhirinaki ana ki te turanga:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Ko te ahua i hangaia ka taea te kii ki Docker ka rere ki Kubernetes, OpenShift ranei, e whakaahuahia ana i roto tohutohu.

Taponga mahi

Ka taea te whakamahi i te anga Quarkus me Maven me Gradle. Kei te tino tautokohia a Maven, kaore i rite ki a Gradle. Engari, i tenei wa kaore a Gradle e tautoko i te hanga kaupapa koretake; he korero taipitopito kei runga i te paetukutuku pukapuka tuhi.

Ngā toronga

Ko Quarkus he anga whakawhanui. I tenei wa he ota 40 toronga, e taapiri ana i nga momo mahi - mai i te tautoko Puna DI ipu и Apache Kameera i mua i te takiuru me te whakaputa inenga mo te whakahaere ratonga. A he toronga kee hei tautoko i nga tono tuhi i Kotlin, hei taapiri atu ki a Java.

mutunga

Ki taku nei whakaaro, he rite tonu a Quarkus ki nga ahuatanga o te waa. Kei te ngawari ake te whakawhanaketanga o te waehere backend, a ko tenei anga kei te whakamaarama me te tere ake te whanaketanga ratonga ma te taapiri i te tautoko taketake mo Docker me Kubernetes. Ko te taapiri nui ko te tautoko i hangaia mo GraalVM me te whakatipuranga o nga whakaahua e whakawhirinaki ana ki te turanga, e taea ai e nga ratonga te tiimata tere me te tango i te waahi mahara. A he mea tino nui tenei i roto i to tatou wa o te hiahia nui mo nga ratonga miihini me te hoahoanga kore.

Pae whaimana - quarkus.io. Ko nga tauira o nga kaupapa mo te tiimata tere e waatea ana GitHub.

Source: will.com

Tāpiri i te kōrero