
Hyrje
MĂ« 7 mars, kompania RedHat (sĂ« shpejti â IBM) korniza e re â . Sipas zhvilluesve, kjo kornizĂ« bazohet nĂ« GraalVM dhe OpenJDK HotSpot dhe Ă«shtĂ« e destinuar pĂ«r Kubernetes. Staku Quarkus pĂ«rfshin: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus dhe tĂ« tjera.
Qëllimi i krijimit është të bëjë Java platformën udhëheqëse për implementimin në Kubernetes dhe zhvillimin e aplikacioneve serverless, duke ofruar një qasje të unifikuar për zhvilluesit si në stilin reaktiv ashtu edhe në atë imperativ.
Nëse shikojmë në kategorizimin e kornizave, Quarkus ndodhet diku midis "Aggregators/Code Generators" dhe "High-level fullstack frameworks". Kjo është më shumë se një agregator, por nuk arrin të jetë full-stack, pasi është e fokusuar në zhvillimin e backend.
Promovohet një shpejtësi shumë e lartë startimi të aplikacionit dhe një konsum të ulët memoje. Këtu janë të dhënat nga faqja e zhvilluesit:
Koha nga startimi deri në përgjigjen e parë (s):
Konfigurimi
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Staku tradicional Cloud Native*
4.3
9.5
Konsumimi i memories (Mb):
Konfigurimi
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Staku tradicional Cloud Native*
140
218
Impresionuese, a nuk është kështu?
*Nuk kam gjetur informacion rreth këtij staku teknologjik, mund të supozojë se është ndonjë Spring Boot me disa shtesa.
Hello World!
Aplikacioni më i thjeshtë, i shkruar në Quarkus, do të dukej kështu:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}Kjo është dosja një klasë dhe mjafton! Mund ta nisni aplikacionin me Maven në modin e zhvillimit:
mvn compile quarkus:dev
âŠ
$ curl http://localhost:8080/hello
helloDallimi nga aplikacioni i zakonshĂ«m â nuk ka klasĂ« Application! Quarkus mbĂ«shtet hot reload, kĂ«shtu qĂ« mund tĂ« ndryshoni aplikacionin pa e rinisur atĂ«, duke e bĂ«rĂ« zhvillimin edhe mĂ« tĂ« shpejtĂ«.
ĂfarĂ« ndodh mĂ« pas? Mund tĂ« shtoni njĂ« shĂ«rbim nĂ« kontroler duke pĂ«rdorur anotacionin . Kodi i shĂ«rbimit:
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}Kontroleri:
@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 anotacione standarde nga kornizat e njohura â CDI dhe JAX-RS. S'ka asgjĂ« tĂ« re pĂ«r tĂ« mĂ«suar, nĂ«se keni punuar me CDI dhe JAX-RS deri mĂ« tani.
Puna me bazën e të dhënave
Hibernate dhe anotimet standarde JPA për entitetet janë të përdorura. Si në rastin e kontrolluesve REST, nevojitet të shkruhet një minimum kodi. Mjafton të specifikoni varësitë në skedarin e ndërtimit dhe të vendosni anotimet. @Entity dhe të konfigurohet datasource në application.properties.
Kaq. Asnjë sessionFactory, persistence.xml dhe skedarë të tjerë shërbimi. Shkruajmë vetëm kodin që na nevojitet. Sidoqoftë, nëse është e nevojshme, mund të krijoni një skedë persistence.xml dhe ta konfigurosh më hollësisht layer-in ORM.
Quarkus mbështet caching për entitetet, koleksionet për marrëdhëniet një-më-shumë, si dhe për kërkesat. Në pamje të parë, duket përkryer, por kjo është caching lokal, për një nyje Kubernetes. Domethënë, cache-t e nyjeve të ndryshme nuk janë të sinkronizuara me njëra-tjetrën. Shpresoj se kjo është përkohësisht.
Ekzekutimi asinkron i kodit
Siç u përmend më arriba, Quarkus mbështet edhe stilin reaktiv të programimit. Kodi i aplikacionit të mëparshëm mund të shkruhet në një formë tjetër.
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/{name}")
public CompletionStage greeting(@PathParam("name") String name) {
return CompletableFuture.supplyAsync(() -> {
return "Përshëndetje " + name + "!";
});
}
}Kodi asinkron gjithashtu mund të transferohet në shërbim, rezultati do të jetë po i njëjtë.
Testimi
Testet për aplikacionet Quarkus mund të shkruhen në JUnit4 ose JUnit5. Më poshtë është dhënë një shembull testi për endpoint-in, i cili është shkruar me RestAssured, por mund të përdoret edhe një framework tjetër:
@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("Përshëndetje " + uuid + "!"));
}
}Annotation @QuarkusTest urdhĂ«ron tĂ« nisni aplikacionin para se tĂ« nisni testet. PĂ«r pjesĂ«n tjetĂ«r â kodi Ă«shtĂ« i njohur pĂ«r tĂ« gjithĂ« zhvilluesit.
Aplikacion i varur nga platforma
Duke qenë se Quarkus është ngushtësisht i integruar me GraalVM, sigurisht që është e mundur të gjeneroni kod të varur nga platforma. Për këtë, duhet të instaloni GraalVM dhe të specifikoni variablin e mjedisit GRAALVM_HOME. Më pas dhe ta specifikoni atë gjatë ndërtimit të aplikacionit:
mvn package -PnativeInteresante, aplikacioni i gjeneruar mund të testohet. Kjo është e rëndësishme, sepse ekzekutimi i kodit "natyror" mund të ndryshojë nga ekzekutimi në JVM. Annotation @SubstrateTest aktivizon kodin e varur nga platforma të aplikacionit. Rishfrytëzimi i kodit ekzistues të testeve mund të realizohet përmes trashëgimisë, kështu që kodi për testimin e aplikacionit të varur nga platforma do të duket kështu:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}Imazhi i gjeneruar mund të paketizohet në Docker dhe të startohet në Kubernetes ose OpenShift, siç është përshkruar në .
Mjetet
Framework-un Quarkus mund të përdoret me Maven dhe Gradle. Maven mbështetet plotësisht, ndryshe nga Gradle. Fatkeqësisht, në këtë moment, Gradle nuk mbështet gjenerimin e një projekti të zbrazët, në faqe ka informacione të detajuara .
Zgjerime
Quarkus Ă«shtĂ« njĂ« framework i zgjerueshĂ«m. NĂ« kĂ«tĂ« moment ekzistojnĂ« rreth , tĂ« cilat shtojnĂ« funksionalitete tĂ« ndryshme â nga mbĂ«shtetje pĂ«r dhe deri te regjistrimi dhe publikimi i metrikeve pĂ«r shĂ«rbimet e funksionuara. Dhe tashmĂ« ekziston njĂ« zgjerim pĂ«r mbĂ«shtetje tĂ« zhvillimit tĂ« aplikacioneve nĂ« gjuhĂ«n Kotlin, pĂ«rveç Java.
Përfundim
Sipas mendimit tim, Quarkus është në përputhje me trendet aktuale. Zhvillimi i kodit backend bëhet gjithnjë e më i lehtë, dhe ky framework e thjeshton më tej dhe përshpejton zhvillimin e shërbimeve, duke shtuar mbështetje "natyrale" për Docker dhe Kubernetes. Një përfitim i madh është mbështetje e integruar për GraalVM dhe gjenerimin e imazheve të varura nga platforma, gjë që lejon shërbimet të fillojnë me të vërtetë shpejt dhe të marrin pak hapësirë në memorie. Kjo është shumë e rëndësishme në kohën tonë të pasionit për mikroshërbimet dhe arkitekturën serverless.
Faqja zyrtare â . Shembujt e projekteve pĂ«r fillim tĂ« shpejtĂ« tashmĂ« ekzistojnĂ« nĂ« .
Burimi: habr.com
