I-Quarkus iyi-Java ye-subatomic ephezulu kakhulu. Uhlolojikelele olufushane lohlaka

I-Quarkus iyi-Java ye-subatomic ephezulu kakhulu. Uhlolojikelele olufushane lohlaka

Isingeniso

NgoMashi XNUMX, i-RedHat (ngokushesha i-IBM) kwethulwe uhlaka olusha - Ama-Quarkus. Ngokusho konjiniyela, lolu hlaka lusekelwe ku-GraalVM ne-OpenJDK HotSpot futhi yakhelwe i-Kubernetes. Isitaki seQuarkus sihlanganisa: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus nabanye.

Umgomo uwukwenza i-Java ibe inkundla ehamba phambili yokuthunyelwa kwe-Kubernetes kanye nokuthuthukiswa kwezinhlelo zokusebenza ezingenasiphakeli, ukuhlinzeka abathuthukisi ngendlela ebumbene yentuthuko kuzo zombili izitayela ezisebenzayo nezibalulekile.

Uma ubheka lokhu ukuhlukaniswa kwezinhlaka, bese i-Quarkus iphakathi kokuthi “Izihlanganisi/Amajeneretha Ekhodi” kanye “Nezinhlaka ezigcwele zezitaki ezigcwele”. Lokhu sekuvele kungaphezulu kwe-aggregator, kodwa akufinyeleli nesitaki esigcwele, ngoba... yakhelwe ukuthuthukiswa kwe-backend.

Isivinini esikhulu kakhulu sokuqaliswa kwesicelo kanye nokusetshenziswa kwememori okuphansi kuyathenjiswa. Nansi idatha evela kuwebhusayithi yonjiniyela:

Isikhathi ukusuka ekuqaleni ukuya kumpendulo yokuqala:

Ukucushwa
I-REST
REST+JPA

I-Quarkus+GraalVM
0.014
0.055

I-Quarkus+OpenJDK
0.75
2.5

Isitaki Somdabu Samafu*
4.3
9.5

Ukusetshenziswa kwememori (Mb):

Ukucushwa
I-REST
REST+JPA

I-Quarkus+GraalVM
13
35

I-Quarkus+OpenJDK
74
130

Isitaki Somdabu Samafu*
140
218

Kuyahlaba umxhwele, akunjalo?

*Angizange ngithole noma yiluphi ulwazi mayelana nalesi sitaki sobuchwepheshe, singacabanga ukuthi lolu uhlobo oluthile lwe-Spring Boot enekhithi yomzimba eyengeziwe..

Sawubona Mhlaba!

Uhlelo lokusebenza olulula olubhalwe ku-Quarkus lungabukeka kanje:

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

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

Ikilasi elilodwa ngokoqobo futhi kwanele! Ungaqalisa uhlelo lokusebenza usebenzisa i-Maven kumodi yokuthuthukisa:

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

Umehluko kuhlelo lokusebenza olujwayelekile ukuthi alikho ikilasi Lohlelo! I-Quarkus isekela ukulayisha kabusha okushisayo, ukuze ukwazi ukushintsha uhlelo lwakho lokusebenza ngaphandle kokuluqala kabusha, okwenza intuthuko isheshe nakakhulu.

Yini elandelayo? Ungakwazi ukwengeza isevisi kusilawuli usebenzisa isichasiselo Faka. Ikhodi yesevisi:

@ApplicationScoped
public class GreetingService {

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

Isilawuli:

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

Qaphela ukuthi i-Quarkus isebenzisa izichasiselo ezijwayelekile ezivela kuzinhlaka ezijwayelekile - i-CDI ne-JAX-RS. Asikho isidingo sokufunda noma yini entsha uma uke wasebenza ne-CDI ne-JAX-RS ngaphambili, kunjalo.

Ukusebenza nge-database

I-Hibernate nezichasiselo ze-JPA ezijwayelekile zezinhlangano zisetshenziswa. Njengabalawuli be-REST, udinga ukubhala ikhodi encane. Kwanele ukukhombisa ukuncika kufayela lomhlangano, engeza izichasiselo @Entity futhi ulungise umthombo wedatha ku-application.properties.

Konke. Awekho ama-sessionFactory, persistence.xml noma amanye amafayela wesevisi. Sibhala ikhodi edingekayo kuphela. Nokho, uma kudingeka, ungakha ifayela le-persistence.xml futhi ulungiselele isendlalelo se-ORM kahle kakhulu.

I-Quarkus isekela ukugcinwa kwesikhashana kwezinhlangano, amaqoqo obudlelwano obubodwa kuya kwabaningi, kanye nemibuzo. Ekuboneni kokuqala kubukeka kukuhle, kepha kunjalo wendawo ukulondoloza isikhashana, endaweni eyodwa ye-Kubernetes. Labo. Izingobo zomlando zamanodi ahlukene azivumelaniswa enye kwenye. Ngethemba ukuthi lokhu okwesikhashana.

Ukwenziwa kwekhodi engavumelaniyo

Njengoba kushiwo ngenhla, i-Quarkus iphinde isekele isitayela sokuhlela esisebenzayo. Ikhodi yesicelo esedlule ingabhalwa ngendlela ehlukile.

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

Ikhodi ye-Asynchronous nayo ingadluliselwa kusevisi, umphumela uzofana.

Ukuhlola

Ukuhlolwa kwezicelo ze-Quarkus kungabhalwa ngo-JUnit4 noma JUnit5. Ngezansi isibonelo sokuhlolwa kwendawo yokugcina, kubhalwe kusetshenziswa i-RestAssured, kodwa olunye uhlaka lungasetshenziswa:

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

Isichasiselo se-@QuarkusTest siyala ukuthi usebenzise uhlelo ngaphambi kokwenza izivivinyo. Okusele ikhodi ejwayelekile kubo bonke onjiniyela.

Uhlelo lokusebenza oluqondene nenkundla

Njengoba i-Quarkus ihlanganiswe ngokuqinile ne-GraalVM, kungenzeka ngempela ukukhiqiza ikhodi eqondene nengxenyekazi. Ukuze wenze lokhu, udinga ukufaka i-GraalVM futhi ucacise i-GRAALVM_HOME imvelo eguquguqukayo. Ngokuqhubekayo bhalisa iphrofayili ukuze uhlanganise futhi uyicacise lapho wakha isicelo:

mvn package -Pnative

Kuyathakazelisa ukuthi uhlelo lokusebenza olukhiqiziwe lungahlolwa. Futhi lokhu kubalulekile ngoba ukwenziwa kwekhodi yomdabu kungase kuhluke ekusetshenzisweni ku-JVM. Isichasiselo se-@SubstrateTest sisebenzisa ikhodi yohlelo lokusebenza ethile. Ukusebenzisa kabusha ikhodi yokuhlola ekhona kungenziwa kusetshenziswa ifa; ngenxa yalokho, ikhodi yokuhlola uhlelo lokusebenza oluncike endaweni izobukeka kanje:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Isithombe esikhiqiziwe singapakishwa ku-Docker futhi sisebenze ku-Kubernetes noma i-OpenShift, echazwe ngokuningiliziwe ku imiyalelo.

Ithuluzi

Uhlaka lwe-Quarkus lungasetshenziswa ne-Maven ne-Gradle. I-Maven isekelwa ngokugcwele, ngokungafani ne-Gradle. Ngeshwa, okwamanje i-Gradle ayikusekeli ukukhiqiza iphrojekthi engenalutho; kukhona imininingwane enemininingwane kuwebhusayithi incwadi yemibhalo.

Izandiso

I-Quarkus iwuhlaka olunwebekayo. Okwamanje kune-oda 40 izandiso, ezengeza ukusebenza okuhlukahlukene - kusuka ekusekeleni Isitsha se-Spring DI и Ikamela le-Apache ngaphambi kokungena nokushicilela amamethrikhi wamasevisi asebenzayo. Futhi sekuvele kunesandiso sokusekela izinhlelo zokusebenza zokubhala e-Kotlin, ngaphezu kwe-Java.

isiphetho

Ngokubona kwami, i-Quarkus ihambisana impela nemikhuba yangaleso sikhathi. Ukwakhiwa kwekhodi yasemuva kuba lula futhi kulula, futhi lolu hlaka lwenza kube lula futhi lusheshise ukuthuthukiswa kwesevisi ngokwengeza ukwesekwa komdabu kwe-Docker ne-Kubernetes. Ukuhlanganisa okukhulu ukwesekwa okwakhelwe ngaphakathi kwe-GraalVM kanye nokukhiqizwa kwezithombe ezincike endaweni, okuvumela amasevisi ukuthi aqale ngokushesha futhi athathe isikhala esincane senkumbulo. Futhi lokhu kubaluleke kakhulu esikhathini sethu sokushisekela okukhulu kwama-microservices kanye ne-serverless architecture.

Isayithi elisemthethweni - quarkus.io. Izibonelo zamaphrojekthi okuqalisa ngokushesha sezivele zikhona kuwo GitHub.

Source: www.habr.com

Engeza amazwana