Quarkus bụ Java subatomic nke kachasị elu. Nchịkọta dị nkenke nke usoro ahụ

Quarkus bụ Java subatomic nke kachasị elu. Nchịkọta dị nkenke nke usoro ahụ

Okwu Mmalite

Na Maachị XNUMXth, RedHat (n'oge na-adịghị anya IBM) ọkọnọ usoro ọhụrụ - Kwarkus. Dịka ndị nrụpụta si kwuo, usoro a dabere na GraalVM na OpenJDK HotSpot ma emebere ya maka Kubernetes. Nchịkọta Quarkus gụnyere: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus na ndị ọzọ.

Ebumnuche bụ ime Java ka ọ bụrụ isi ikpo okwu maka ntinye Kubernetes na mmepe ngwa na-enweghị ihe nkesa, na-enye ndị mmepe ụzọ dị n'otu maka mmepe na ụdị mmeghachi omume na nke dị mkpa.

Ọ bụrụ na ị na-ele anya nke a Nkewa nke frameworks, mgbe ahụ, Quarkus bụ ebe n'etiti "Aggregators/Code Generators" na "Elu-larịị fullstack frameworks". Nke a abụrụlarị karịa mkpokọta, mana ọ naghị erute n'uju, n'ihi na... ahaziri maka mmepe azụ azụ.

A na-ekwe nkwa mwepụta ngwa dị oke ọsọ yana obere ebe nchekwa. Nke a bụ data sitere na webụsaịtị onye nrụpụta:

Oge site na mmalite ruo nzaghachi mbụ (s):

Nhazi
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Omenala igwe ojii
4.3
9.5

Oriri ebe nchekwa (Mb):

Nhazi
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Omenala igwe ojii
140
218

Na-akpali mmasị, ọ bụghị ya?

*Ahụghị m ozi ọ bụla gbasara nchịkọta teknụzụ a, anyị nwere ike iche na nke a bụ ụdị Boot Spring nwere ngwa ahụ ọzọ..

Ndewo Ụwa!

Ngwa kachasị mfe edere na Quarkus ga-adị ka nke a:

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

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

Ọ bụ otu klas na nke ahụ ezuola! Ị nwere ike iji Maven mee ngwa a na ọnọdụ mmepe:

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

Ihe dị iche na ngwa mgbe niile bụ na enweghị klas ngwa! Quarkus na-akwado ibugharị ọkụ, yabụ ị nwere ike ịgbanwe ngwa gị na-enweghị ịmalitegharị ya, na-eme mmepe ngwa ngwa.

Gịnị na-esote? Ịnwere ike ịgbakwunye ọrụ na njikwa site na iji nkọwa Gbaa ya. Koodu ọrụ:

@ApplicationScoped
public class GreetingService {

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

Onye njikwa:

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

Rịba ama na Quarkus na-eji nkọwa ọkọlọtọ sitere na usoro ndị ama ama - CDI na JAX-RS. Ọ dịghị mkpa ịmụta ihe ọhụrụ ma ọ bụrụ na ị na-arụ ọrụ na CDI na JAX-RS na mbụ, n'ezie.

Na-arụ ọrụ na nchekwa data

A na-eji nkọwa nkọwa Hibernate na ọkọlọtọ JPA maka ụlọ ọrụ. Dịka ọ dị na ndị njikwa REST, ịkwesịrị ide opekempe koodu. O zuru ezu igosi ihe ndabere na faịlụ mgbakọ, tinye nkọwa @Entity ma hazie datasource na ngwa.properties.

Ha niile. Enweghị ụlọ ọrụ sessions, persistence.xml ma ọ bụ faịlụ ọrụ ndị ọzọ. Anyị na-ede naanị koodu achọrọ. Agbanyeghị, ọ bụrụ na ọ dị mkpa, ịnwere ike ịmepụta faịlụ persistence.xml wee hazie oyi akwa ORM nke ọma.

Quarkus na-akwado caching nke ụlọ ọrụ, nchịkọta maka otu-na-ọtụtụ mmekọrịta, yana ajụjụ. Na ilele mbụ ọ dị mma, mana ọ dị mpaghara caching, maka otu ọnụ ụzọ Kubernetes. Ndị ahụ. A naghị emekọrịta cache nke ọnụ ọnụ dị iche iche na ibe ha. Enwere m olileanya na nke a bụ nwa oge.

Mkpebi koodu asynchronous

Dịka ekwuru n'elu, Quarkus na-akwadokwa ụdị mmemme na-emeghachi omume. Enwere ike dee koodu nke ngwa gara aga n'ụdị dị iche.

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

Enwere ike ịnyefe koodu asynchronous na ọrụ ahụ, nsonaazụ ga-abụ otu.

Ule

Enwere ike dee ule maka ngwa Quarkus na JUnit4 ma ọ bụ JUnit5. N'okpuru bụ ule atụ maka njedebe njedebe, ejiri RestAssured dee ya, mana enwere ike iji usoro ọzọ:

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

Nkọwa @QuarkusTest na-agwa gị ka ịmee ngwa ahụ tupu ịme ule. Ndị ọzọ bụ koodu maara nke ọma maka ndị mmepe niile.

Ngwa akọwapụtara nke ikpo okwu

Ebe ọ bụ na ejikọtara Quarkus na GraalVM nke ọma, ọ ga-ekwe omume ịmepụta koodu akọwapụtara nke ọma. Iji mee nke a, ịkwesịrị ịwụnye GraalVM wee kọwapụta mgbanwe gburugburu GRAALVM_HOME. Ọzọkwa debanye aha profaịlụ maka mgbakọ ma kọwaa ya mgbe ị na-ewu ngwa:

mvn package -Pnative

N'ụzọ na-akpali mmasị, enwere ike ịnwale ngwa emepụtara. Na nke a dị mkpa n'ihi na ogbugbu nke koodu obodo nwere ike ịdị iche na ogbugbu na JVM. Nkọwa @SubstrateTest na-eme koodu ngwa akọwapụtara nke ikpo okwu. Enwere ike ịmegharị koodu ule dị ugbu a site na iji ihe nketa; N'ihi ya, koodu maka ịnwale ngwa dabere na ikpo okwu ga-adị ka nke a:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Enwere ike ịchịkọta onyonyo emepụtara na Docker wee gbaa ọsọ na Kubernetes ma ọ bụ OpenShift, akọwara n'uju ntụziaka.

Ngwaọrụ

Enwere ike iji usoro Quarkus na Maven na Gradle. A kwadoro Maven nke ọma, n'adịghị ka Gradle. Ọ dị nwute, ugbu a Gradle anaghị akwado ịmepụta ọrụ efu; enwere ozi zuru ezu na webụsaịtị akwụkwọ ọgụgụ.

Ndokwa

Quarkus bụ usoro nwere ike ịgbatị. Ugbu a enwere iwu 40 ndọtị, nke na-agbakwunye ọrụ dị iche iche - site na nkwado Mmiri DI akpa и Apache Camel tupu ịbanye na ibipụta metrik maka ọrụ na-agba ọsọ. Ma enweelarị ndọtị iji kwado ngwa ide na Kotlin, na mgbakwunye na Java.

nkwubi

N'uche nke m, Quarkus dabara na usoro nke oge ahụ. Mmepe koodu azụ na-adị mfe ma dịkwa mfe, usoro a na-eme ka ọ dị mfe ma na-eme ka mmepe ọrụ dị ngwa site na ịgbakwunye nkwado obodo maka Docker na Kubernetes. Nnukwu gbakwunyere bụ nkwado wuru n'ime maka GraalVM na ọgbọ nke onyonyo dabere na ikpo okwu, nke na-enye ohere ọrụ ịmalite ngwa ngwa ma were obere ebe nchekwa. Ma nke a dị ezigbo mkpa n'oge anyị nwere oke agụụ maka microservices na ihe owuwu enweghị ihe nkesa.

Saịtị gọọmentị - quakus.io. Ihe atụ nke oru ngo maka mmalite ngwa ngwa adịlarị GitHub.

isi: www.habr.com

Tinye a comment