Quarkus — Java subsonike. NjĂ« pĂ«rmbledhje e shkurtĂ«r e strukturĂ«s.

Quarkus — Java subsonike. NjĂ« pĂ«rmbledhje e shkurtĂ«r e strukturĂ«s.

Hyrje

MĂ« 7 mars, kompania RedHat (shpejt — IBM) paraqiti njĂ« framework tĂ« ri — Quarkus. Sipas zhvilluesve, ky framework bazohet nĂ« GraalVM dhe OpenJDK HotSpot dhe Ă«shtĂ« krijuar pĂ«r Kubernetes. Stack-u Quarkus pĂ«rfshin: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus dhe tĂ« tjerĂ«.

Qëllimi i krijimit është të bëjë Java platformën kryesore për shpërndarjen në Kubernetes dhe zhvillimin e aplikacioneve serverless, duke ofruar një qasje të unifikuar për zhvillimin në stilin reaktiv dhe imperativ.

Nëse shohim në këtë kategorizimin e framework-eve, Quarkus ndodhet diku mes "Aggregatorëve/Generatorëve të Kodit" dhe "Framework-eve të Nivelit të Lartë Fullstack". Ky është më shumë se një agregator, por nuk arin të bëhet plotësisht full-stack, pasi është i fokusuar në zhvillimin e backend-it.

Premtohet një shpejtësi shumë e lartë nisjeje të aplikacionit dhe një konsumi të vogël memorie. Ja të dhënat nga faqja e zhvilluesit:

Koha nga nisja deri në përgjigjen e parë (s):

Konfigurimi
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Tradicional Cloud Native Stack*
4.3
9.5

Konsumi i memories (Mb):

Konfigurimi
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Tradicional Cloud Native Stack*
140
218

Imponuese, apo jo?

*Nuk kam gjetur informacione mbi këtë stack teknologjik, mund të supozoj se është një lloj Spring Boot me ndihmën e shtesave.

Përshëndetje Botë!

Aplikacioni më i thjeshtë i shkruar në Quarkus do të duket kështu:

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

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

Ky është dosido një klasë dhe është e mjaftueshme! Mund ta nisni aplikacionin me Maven në modalitetin e zhvillimit:

mvn compile quarkus:dev


$ curl http://localhost:8080/hello
hello

Dallimi nga aplikacionet e zakonshme është se nuk ka klasës Application! Quarkus mbështet hot reload, kështu që mund të ndryshoni aplikacionin pa e rinisur, duke bërë që zhvillimi të bëhet edhe më i shpejtë.

ÇfarĂ« ndodh nĂ« vazhdim? Mund tĂ« shtoni njĂ« shĂ«rbim nĂ« kontrollues me ndihmĂ«n e annotacionit Injektim. Kodi i shĂ«rbimit:

@ApplicationScoped
public class GreetingService {

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

Kontrolleri:

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

Vini re se nĂ« Quarkus pĂ«rdoren annotacione standarde nga framework-et e njohura — CDI dhe JAX-RS. Nuk ka nevojĂ« tĂ« mĂ«soni diçka tĂ« re, po tĂ« keni punuar me CDI dhe JAX-RS pĂ«rpara.

Puna me bazën e të dhënave

Përdoret Hibernate dhe annotacionet standarde JPA për entitetet. Ashtu si në rastin me kontrolluesit REST, është e nevojshme të shkruani sa më pak kod. Mjafton të specifikoni varësitë në skedarin e ndërtimit, të vendosni annotacionet @Entity dhe të konfiguroni datasource në application.properties.

Kaq. Asnjë sessionFactory, persistence.xml dhe skedarë shërbimi të tjerë. Shkruani vetëm atë kod që është i nevojshëm. Megjithatë, nëse është e nevojshme, mund të krijoni një skedar persistence.xml dhe të konfiguroni më hollësisht nivelin ORM.

Quarkus mbështet caching për entitetet, koleksionet për marrëdhëniet një-në-më shumë, si dhe për kërkesat. Në pamje të parë, duket e shkëlqyer, por është cache lokale për një nyje Kubernetes. Pra, cache-t e nyjeve të ndryshme nuk sinjalizohen mes tyre. Shpresoj se është përkohësisht.

Ekzekutimi asinkron i kodit

Siç u përmend më parë, Quarkus mbështet gjithashtu stilin reaktiv të programimit. Kodi i aplikacionit të mëparshëm mund të shkruhet në një formë të ndryshme.

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

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public CompletionStage greeting(@PathParam("name") String name) {
       return CompletableFuture.supplyAsync(() -> {
           return "Hello " + name + "!";
       });
   }
}

Kodi asinkron gjithashtu mund të transferohet në shërbim, rezultati do të jetë i njëjtë.

Testimi

Testet për aplikacionet Quarkus mund të shkruhen në JUnit4 ose JUnit5. Më poshtë është një shembull testi për endpoint, i shkruar me ndihmën e RestAssured, por mund të përdoren edhe framework-et e tjera:

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

Annotacioni @QuarkusTest kĂ«rkon qĂ« aplikacioni tĂ« jetĂ« i nisur para se tĂ« nisin testet. NĂ« tĂ« tjerĂ« aspekte — kodi i njohur pĂ«r tĂ« gjithĂ« zhvilluesit.

Aplikacion i varur nga platforma

Duke qenë se Quarkus është ngushtësisht i integruar me GraalVM, është e mundur të generohet kod që është i varur nga platforma. Për këtë është e nevojshme të instaloni GraalVM dhe të vendosni variablin e ambientit GRAALVM_HOME. Më pas përcaktoni një profil për ndërtimin dhe ta specifikoni atë gjatë ndërtimit të aplikacionit:

mvn package -Pnative

E çuditshme, por aplikacioni i gjeneruar mund të testohet. Dhe kjo është e rëndësishme, pasi ekzekutimi i kodit "të natyrshëm" mund të ndryshojë nga ekzekutimi në JVM. Annotacioni @SubstrateTest ekzekuton kodin e varur nga platforma të aplikacionit. Përdorimi i kodit ekzistues të testeve mund të bëhet përmes trashëgimisë, duke bërë që kodi për testimin e aplikacionit të varur nga platforma të duket kështu:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Imazhi i gjeneruar mund të paketizohet në Docker dhe të ekzekutohet në Kubernetes ose OpenShift, siç është përshkruar në udhëzues.

Instrumentari

Kuadri Quarkus mund të përdoret me Maven dhe Gradle. Maven mbështetet plotësisht, në kontrast me Gradle. Fatkeqësisht, aktualisht Gradle nuk mbështet gjenerimin e një projekti të zbrazët, ka informacion të detajuar në faqen e internetit një udhëzues.

Zgjerime

Quarkus është një kuadër i zgjerueshëm. Aktualisht ekzistojnë rreth 40 zgjerimesh, të cilat shtojnë funksionalitet të ndryshëm - nga mbështetje për kontraktin DI të Spring dhe Apache Camel deri te regjistrimi dhe publikimi i metrikave për shërbimet në punë. Ka tashmë një zgjerim për mbështetje të zhvillimit të aplikacioneve në gjuhën Kotlin, përveç Java.

Përfundimi

Në mendimin tim, Quarkus është në përputhje me trendet e kohës. Zhvillimi i kodit backend bëhet gjithnjë e më i lehtë, dhe ky kuadër e thjeshton dhe përshpejton zhvillimin e shërbimeve, duke ofruar mbështetje "native" për Docker dhe Kubernetes. Një plus i madh - mbështetje e integruar për GraalVM dhe gjenerimin e imazheve të varura nga platforma, që lejon shërbimet të startojnë realisht shpejt dhe të konsumojnë pak hapësirë në memorie. Kjo është shumë e rëndësishme në kohën tonë të pasionit masiv për mikroshërbimet dhe arkitekturën serverless.

Faqja zyrtare - quarkus.io. Shembuj të projekteve për një fillim të shpejtë janë tashmë në GitHub.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster