Ang Quarkus maoy supersoniko nga subatomiko nga Java. Mubo nga overview sa framework

Ang Quarkus maoy supersoniko nga subatomiko nga Java. Mubo nga overview sa framework

Pasiuna

Sa Marso XNUMX, RedHat (sa dili madugay IBM) gipresentar bag-ong framework- quarkus. Sumala sa mga nag-develop, kini nga balangkas gibase sa GraalVM ug OpenJDK HotSpot ug gidisenyo alang sa Kubernetes. Ang Quarkus stack naglakip sa: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus ug uban pa.

Ang tumong mao ang paghimo sa Java nga nag-unang plataporma alang sa Kubernetes deployment ug serverless application development, nga naghatag sa mga developers og usa ka hiniusang pamaagi sa kalamboan sa reaktibo ug imperative nga mga estilo.

Kung imong tan-awon kini klasipikasyon sa mga gambalay, unya Quarkus anaa sa taliwala sa "Aggregators / Code Generators" ug "High-level fullstack frameworks". Kini labaw pa sa usa ka aggregator, apan dili kini makaabot sa bug-os nga stack, tungod kay ... gipahaum alang sa backend development.

Taas kaayo nga tulin sa paglansad sa aplikasyon ug ubos nga konsumo sa memorya ang gisaad. Ania ang datos gikan sa website sa developer:

Oras gikan sa pagsugod hangtod sa unang tubag (mga):

Pagsalig
PAHULAY
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Tradisyonal nga Cloud Native Stack*
4.3
9.5

Konsumo sa memorya (Mb):

Pagsalig
PAHULAY
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Tradisyonal nga Cloud Native Stack*
140
218

Impressive, dili ba?

*Wala koy nakit-an nga bisan unsang kasayuran bahin sa kini nga stack sa teknolohiya, mahimo naton hunahunaon nga kini usa ka matang sa Spring Boot nga adunay dugang nga body kit..

Kumusta Kalibutan!

Ang pinakasimple nga aplikasyon nga gisulat sa Quarkus mahimong ingon niini:

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

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

Kini usa ka klase ug igo na kana! Mahimo nimong ipadagan ang aplikasyon gamit ang Maven sa mode sa pag-uswag:

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

Ang kalainan sa usa ka regular nga aplikasyon mao nga walay klase sa Application! Gisuportahan sa Quarkus ang mainit nga pag-reload, aron mabag-o nimo ang imong aplikasyon nga wala kini i-restart, nga labi ka paspas ang pag-uswag.

Unsay sunod? Mahimo nimong idugang ang usa ka serbisyo sa usa ka controller gamit ang usa ka anotasyon Pagdugtong. Kodigo sa serbisyo:

@ApplicationScoped
public class GreetingService {

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

Controller:

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

Timan-i nga gigamit ni Quarkus ang mga sumbanan nga anotasyon gikan sa pamilyar nga mga balangkas - CDI ug JAX-RS. Dili kinahanglan nga makakat-on bisan unsa nga bag-o kung nagtrabaho ka sa CDI ug JAX-RS kaniadto, siyempre.

Pagtrabaho uban sa database

Ang hibernate ug standard nga JPA annotation para sa mga entidad gigamit. Sama sa REST controllers, kinahanglan nimong isulat ang labing gamay nga code. Igo na nga ipaila ang mga dependency sa assembly file, idugang ang mga anotasyon @Entity ug i-configure ang datasource sa application.properties.

Tanan. Walay sessionFactory, persistence.xml o uban pang service files. Gisulat lang namo ang code nga gikinahanglan. Apan, kung gikinahanglan, makahimo ka og persistence.xml file ug i-configure ang ORM layer nga mas maayo.

Gisuportahan sa Quarkus ang pag-cache sa mga entidad, mga koleksyon alang sa usa-sa-daghang mga relasyon, ug mga pangutana. Sa una nga pagtan-aw kini nindot tan-awon, apan kini lokal caching, alang sa usa ka Kubernetes node. Mga. Ang mga cache sa lain-laing mga node wala ma-synchronize sa usag usa. Manghinaut ko nga kini temporaryo.

Asynchronous nga pagpatuman sa code

Sama sa gihisgutan sa ibabaw, gisuportahan usab ni Quarkus ang reaktibo nga istilo sa programming. Ang code sa miaging aplikasyon mahimong isulat sa lahi nga porma.

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

Ang asynchronous code mahimo usab nga ibalhin sa serbisyo, ang resulta parehas.

Pagsulay

Ang mga pagsulay alang sa mga aplikasyon sa Quarkus mahimong isulat sa JUnit4 o JUnit5. Sa ubos usa ka pananglitan nga pagsulay alang sa usa ka katapusan nga punto, kini gisulat gamit ang RestAssured, apan ang lain nga balangkas mahimong magamit:

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

Ang @QuarkusTest annotation nagmando kanimo sa pagpadagan sa aplikasyon sa dili pa magpadagan sa mga pagsulay. Ang nahabilin mao ang code nga pamilyar sa tanan nga mga developer.

Aplikasyon nga espesipiko sa plataporma

Tungod kay ang Quarkus hugot nga gisagol sa GraalVM, siyempre posible nga makamugna og code nga espesipiko sa plataporma. Aron mahimo kini, kinahanglan nimo nga i-install ang GraalVM ug ipiho ang GRAALVM_HOME environment variable. Dugang pa magparehistro ug profile para sa assembly ug ipiho kini sa dihang magtukod sa aplikasyon:

mvn package -Pnative

Makapainteres, ang nahimo nga aplikasyon mahimong masulayan. Ug kini hinungdanon tungod kay ang pagpatuman sa lumad nga kodigo mahimong lahi sa pagpatuman sa JVM. Ang @SubstrateTest annotation nagpadagan sa code sa aplikasyon nga espesipiko sa plataporma. Ang paggamit pag-usab sa kasamtangan nga code sa pagsulay mahimong buhaton gamit ang kabilin; isip resulta, ang code alang sa pagsulay sa usa ka aplikasyon nga nagsalig sa plataporma mahimong sama niini:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Ang namugna nga imahe mahimong ma-package sa Docker ug modagan sa Kubernetes o OpenShift, nga gihulagway sa detalye sa mga instruksyon.

Toolkit

Ang balangkas sa Quarkus mahimong magamit sa Maven ug Gradle. Ang Maven hingpit nga gisuportahan, dili sama sa Gradle. Ikasubo, sa pagkakaron wala gisuportahan sa Gradle ang paghimo og walay sulod nga proyekto; adunay detalyado nga impormasyon sa website libro nga libro.

Mga ekstensiyon

Ang Quarkus usa ka mapalapad nga balangkas. Sa pagkakaron naay order 40 ka extension, nga nagdugang lainlain nga gamit - gikan sa suporta Spring DI sudlanan ΠΈ Apache Camel sa wala pa ang pag-log ug pagmantala sa mga sukatan alang sa pagpadagan sa mga serbisyo. Ug aduna nay extension aron suportahan ang mga aplikasyon sa pagsulat sa Kotlin, dugang sa Java.

konklusyon

Sa akong opinyon, ang Quarkus nahiuyon sa mga uso sa panahon. Ang pag-uswag sa backend code nahimong mas sayon ​​ug mas sayon, ug kini nga balangkas mas gipasimple ug gipadali ang pagpalambo sa serbisyo pinaagi sa pagdugang sa lumad nga suporta alang sa Docker ug Kubernetes. Ang usa ka dako nga dugang mao ang built-in nga suporta alang sa GraalVM ug ang henerasyon sa mga imahe nga nagsalig sa platform, nga nagtugot sa mga serbisyo nga magsugod dayon ug makakuha gamay nga espasyo sa memorya. Ug kini hinungdanon kaayo sa atong panahon sa mass passion alang sa microservices ug serverless architecture.

Opisyal nga site - quarkus.io. Ang mga pananglitan sa mga proyekto alang sa dali nga pagsugod anaa na sa GitHub.

Source: www.habr.com

Idugang sa usa ka comment