Quarkus — nĂ«nsonor Java e subatomike. NjĂ« pĂ«rmbledhje e shkurtĂ«r e framĂ«vjekĂ«s.

Quarkus — nĂ«nsonor Java e subatomike. NjĂ« pĂ«rmbledhje e shkurtĂ«r e framĂ«vjekĂ«s.

Hyrje

MĂ« 7 mars, kompania RedHat (sĂ« shpejti — IBM) ka prezantuar korniza e re — Quarkus. 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ë artikull. 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
hello

Dallimi 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 Inject. 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 të shkruani profilin për ndërtim dhe ta specifikoni atë gjatë ndërtimit të aplikacionit:

mvn package -Pnative

Interesante, 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ë udhëzimet.

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 manuali.

Zgjerime

Quarkus Ă«shtĂ« njĂ« framework i zgjerueshĂ«m. NĂ« kĂ«tĂ« moment ekzistojnĂ« rreth 40 zgjerime, tĂ« cilat shtojnĂ« funksionalitete tĂ« ndryshme — nga mbĂ«shtetje pĂ«r Spring DI konteinerin dhe Apache Camel 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 — quarkus.io. Shembujt e projekteve pĂ«r fillim tĂ« shpejtĂ« tashmĂ« ekzistojnĂ« nĂ« GitHub.

Burimi: habr.com

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