Quarkus hè un Java subatomicu supersonicu. Breve panoramica di u quadru

Quarkus hè un Java subatomicu supersonicu. Breve panoramica di u quadru

Introduzione

U XNUMX di marzu, RedHat (prestu IBM) prisentatu novu quadru - quarkus. Sicondu i sviluppatori, stu quadru hè basatu nantu à GraalVM è OpenJDK HotSpot è hè pensatu per Kubernetes. A pila Quarkus include: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus è altri.

L'obiettivu hè di fà di Java a piattaforma di punta per l'implementazione di Kubernetes è u sviluppu di l'applicazioni senza server, chì furnisce à i sviluppatori un approcciu unificatu per u sviluppu in stili reattivi è imperativi.

Fighjendu questu classificazione di frameworks, allora Quarkus hè in qualchì locu trà "Aggregatori / Generatori di codice" è "Quadri fullstack high-level". Questu hè digià più cà un aggregatore, ma ùn ghjunghje ancu à a pila piena, perchè ... adattatu per u sviluppu di backend.

A velocità assai alta di u lanciu di l'applicazione è u cunsumu di memoria bassu sò prumessi. Eccu i dati da u situ web di u sviluppatore:

Tempu da u principiu à a prima risposta (s):

Cunfigurazione
REST
REST + JPA

Quarkus + GraalVM
0.014
0.055

Quarkus + OpenJDK
0.75
2.5

Stack Native Traditional Cloud*
4.3
9.5

Cunsumu di memoria (Mb):

Cunfigurazione
REST
REST + JPA

Quarkus + GraalVM
13
35

Quarkus + OpenJDK
74
130

Stack Native Traditional Cloud*
140
218

Impressive, ùn hè micca?

*Ùn aghju micca trovu infurmazione nantu à sta pila di tecnulugia, pudemu suppone chì questu hè un tipu di Spring Boot cù un kit di corpu supplementu..

Hello World!

L'applicazione più simplice scritta in Quarkus parerebbe cusì:

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

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

Hè literalmente una classe è basta ! Pudete eseguisce l'applicazione cù Maven in modu di sviluppu:

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

A sfarenza da una applicazione regulare hè chì ùn ci hè micca una classa Applicazione! Quarkus supporta a ricarica calda, cusì pudete cambià a vostra applicazione senza riavvia, facendu u sviluppu ancu più veloce.

Chì ci hè dopu ? Pudete aghjunghje un serviziu à un controller usendu una annotazione Injectà. Codice di serviziu:

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

Nota chì Quarkus usa annotazioni standard da frameworks familiari - CDI è JAX-RS. Ùn ci hè bisognu di amparà qualcosa di novu sè avete travagliatu cù CDI è JAX-RS prima, sicuru.

U travagliu cù a basa di dati

Hibernate è annotazioni JPA standard per entità sò aduprate. Cum'è cù i cuntrolli REST, avete bisognu di scrive un minimu di codice. Hè abbastanza per indicà e dipendenze in u schedariu di l'assemblea, aghjunghje annotazioni @Entity è cunfigurà datasource in application.properties.

Tuttu. Nisuna sessionFactory, persistence.xml o altri schedarii di serviziu. Scrivemu solu u codice chì hè necessariu. In ogni casu, se ne necessariu, pudete creà un schedariu persistence.xml è cunfigurà a capa ORM più finamente.

Quarkus supporta a cache di entità, cullezzione per relazioni unu à parechje, è dumande. À u primu sguardu pare bellu, ma hè lucale cache, per un node Kubernetes. Quelli. I cache di diversi nodi ùn sò micca sincronizati cù l'altri. Spergu chì questu hè tempurale.

Esecuzione di codice asincronu

Cumu l'esitatu sopra, Quarkus sustene ancu u stilu di prugrammazione reattiva. U codice di l'applicazione precedente pò esse scrittu in una forma diversa.

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

U codice Asynchronous pò ancu esse trasferitu à u serviziu, u risultatu serà u listessu.

Prucessioni

I testi per l'applicazioni Quarkus ponu esse scritti in JUnit4 o JUnit5. Quì sottu hè un esempiu di prova per un endpoint, hè scrittu cù RestAssured, ma un altru quadru pò esse usatu:

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

L'annotazione @QuarkusTest vi urdineghja di eseguisce l'applicazione prima di eseguisce e teste. U restu hè codice familiar à tutti i sviluppatori.

Applicazione specifica per a piattaforma

Siccomu Quarkus hè strettamente integratu cù GraalVM, hè sicuru pussibule di generà codice specificu di a piattaforma. Per fà questu, avete bisognu di installà GraalVM è specificà a variabile d'ambiente GRAALVM_HOME. In più registrà un prufilu per l'assemblea è specificate quandu custruisce l'applicazione:

mvn package -Pnative

Curiosamente, l'applicazione generata pò esse pruvata. È questu hè impurtante perchè l'esekzione di codice nativu pò differisce da l'esekzione nantu à a JVM. L'annotazione @SubstrateTest esegue un codice di applicazione specificu per a piattaforma. A riutilizazione di u codice di prova esistente pò esse fatta cù l'eredità; in u risultatu, u codice per pruvà una applicazione dipendente da a piattaforma sarà cusì:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

L'imagine generata pò esse imballata in Docker è eseguita in Kubernetes o OpenShift, descritta in dettagliu in instructions.

Strumenti

U quadru Quarkus pò esse usatu cù Maven è Gradle. Maven hè cumplettamente supportatu, à u cuntrariu di Gradle. Sfortunatamente, à u mumentu Gradle ùn sustene micca a generazione di un prughjettu viotu; ci hè infurmazione dettagliata nantu à u situ web manuale.

Estensioni

Quarkus hè un framework extensible. Attualmente ci hè un ordine 40 estensioni, chì aghjunghjenu diverse funziunalità - da u supportu Conteneur à ressort DI и Apache Camel prima di logu è publicà metriche per i servizii di esecuzione. E ci hè digià una estensione per sustene l'applicazioni di scrittura in Kotlin, in più di Java.

cunchiusioni

In u mo parè, Quarkus hè abbastanza in linea cù i tendenzi di u tempu. U sviluppu di u codice di backend hè diventatu più faciule è più faciule, è questu quadru simplifica ancu più è accelerà u sviluppu di u serviziu aghjunghjendu supportu nativu per Docker è Kubernetes. Un grande plus hè u supportu integratu per GraalVM è a generazione d'imaghjini dipendente da a piattaforma, chì permette à i servizii di inizià veramente rapidamente è occupanu pocu spaziu di memoria. È questu hè assai impurtante in u nostru tempu di passione di massa per i microservizi è l'architettura senza servitore.

situ ufficiali - quarkus.io. Esempii di prughjetti per un principiu rapidu sò digià dispunibili GitHub.

Source: www.habr.com

Add a comment