
Hyrje
MĂ« 7 mars, kompania RedHat (shpejt â IBM) njĂ« framework tĂ« ri â . 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ë 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
helloDallimi 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 . 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 dhe ta specifikoni atë gjatë ndërtimit të aplikacionit:
mvn package -PnativeE ç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ë .
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 .
Zgjerime
Quarkus është një kuadër i zgjerueshëm. Aktualisht ekzistojnë rreth , të cilat shtojnë funksionalitet të ndryshëm - nga mbështetje për dhe 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 - . Shembuj të projekteve për një fillim të shpejtë janë tashmë në .
Burimi: habr.com
