Introduzione
U XNUMX di marzu, RedHat (prestu IBM)
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
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
@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ù
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
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
Estensioni
Quarkus hè un framework extensible. Attualmente ci hè un ordine
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 -
Source: www.habr.com