Quarkus je nadzvučna subatomska Java. Kratak pregled okvira

Quarkus je nadzvučna subatomska Java. Kratak pregled okvira

Uvod

XNUMX. ožujka RedHat (uskoro IBM) predstavio novi okvir - kvarkus. Prema programerima, ovaj okvir se temelji na GraalVM i OpenJDK HotSpotu i dizajniran je za Kubernetes. Quarkus stack uključuje: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus i druge.

Cilj je Javu učiniti vodećom platformom za implementaciju Kubernetesa i razvoj aplikacija bez poslužitelja, pružajući programerima jedinstveni pristup razvoju u reaktivnom i imperativnom stilu.

Ako pogledate ovo klasifikacija okvira, onda je Quarkus negdje između “Agregatora/Generatora koda” i “High-level fullstack frameworka”. Ovo je već više od agregatora, ali ne doseže ni full stack, jer... prilagođen za backend razvoj.

Obećana je vrlo velika brzina pokretanja aplikacije i mala potrošnja memorije. Ovo su podaci s web stranice programera:

Vrijeme od početka do prvog odgovora (s):

Konfiguracija
OSTALO
OSTALO+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Tradicionalni izvorni skup oblaka*
4.3
9.5

Potrošnja memorije (Mb):

Konfiguracija
OSTALO
OSTALO+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Tradicionalni izvorni skup oblaka*
140
218

Impresivno, zar ne?

*Nisam našao nikakve informacije o ovoj tehnologiji, možemo pretpostaviti da je ovo neka vrsta Spring Boot-a s dodatnim body kitom.

Pozdrav svijete!

Najjednostavnija aplikacija napisana u Quarkusu izgledala bi ovako:

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

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

To je doslovno jedan razred i to je dovoljno! Aplikaciju možete pokrenuti koristeći Maven u razvojnom modu:

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

Razlika od obične aplikacije je u tome što nema klase aplikacije! Quarkus podržava vruće ponovno učitavanje, tako da možete promijeniti svoju aplikaciju bez ponovnog pokretanja, čineći razvoj još bržim.

Što je sljedeće? Možete dodati uslugu kontroleru pomoću napomene Ubrizgati. Šifra usluge:

@ApplicationScoped
public class GreetingService {

   public String greeting(String name) {
       return "Hello " + name + "!";
   }
}

Upravljač:

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

Imajte na umu da Quarkus koristi standardne komentare iz poznatih okvira - CDI i JAX-RS. Nema potrebe učiti ništa novo ako ste prije radili s CDI i JAX-RS, naravno.

Rad s bazom podataka

Koriste se Hibernate i standardne JPA bilješke za entitete. Kao i kod REST kontrolera, morate napisati minimum koda. Dovoljno je naznačiti ovisnosti u montažnoj datoteci, dodati zabilješke @Entity i konfigurirajte izvor podataka u aplikaciji.svojstva.

Svi. Nema sessionFactory, persistence.xml ili drugih servisnih datoteka. Pišemo samo kod koji je potreban. Međutim, ako je potrebno, možete stvoriti datoteku persistence.xml i preciznije konfigurirati ORM sloj.

Quarkus podržava predmemoriranje entiteta, zbirke za odnose jedan prema više i upite. Na prvi pogled izgleda super, ali je tako lokalni predmemoriranje, za jedan Kubernetes čvor. Oni. Predmemorije različitih čvorova nisu međusobno sinkronizirane. Nadam se da je ovo privremeno.

Asinkrono izvršavanje koda

Kao što je gore spomenuto, Quarkus također podržava stil reaktivnog programiranja. Kod prethodne prijave može se napisati u drugom obliku.

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

Asinkroni kod se također može prenijeti na uslugu, rezultat će biti isti.

Testiranje

Testovi za Quarkus aplikacije mogu se napisati u JUnit4 ili JUnit5. Ispod je primjer testa za krajnju točku, napisan je korištenjem RestAssured, ali može se koristiti i drugi okvir:

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

Bilješka @QuarkusTest upućuje vas da pokrenete aplikaciju prije pokretanja testova. Ostatak je kod poznat svim programerima.

Aplikacija specifična za platformu

Budući da je Quarkus usko integriran s GraalVM-om, naravno moguće je generirati kod specifičan za platformu. Da biste to učinili, trebate instalirati GraalVM i navesti varijablu okoline GRAALVM_HOME. Unaprijediti registrirajte profil za montažu i navedite ga prilikom izrade aplikacije:

mvn package -Pnative

Zanimljivo je da se generirana aplikacija može testirati. A ovo je važno jer se izvođenje izvornog koda može razlikovati od izvođenja na JVM-u. Napomena @SubstrateTest pokreće kod aplikacije specifičan za platformu. Ponovna upotreba postojećeg testnog koda može se izvršiti korištenjem nasljeđivanja; kao rezultat toga, kod za testiranje aplikacije ovisne o platformi izgledat će ovako:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Generirana slika može se upakirati u Docker i pokrenuti u Kubernetesu ili OpenShiftu, što je detaljno opisano u instrukcije.

alat

Okvir Quarkus može se koristiti s Mavenom i Gradleom. Maven je u potpunosti podržan, za razliku od Gradlea. Nažalost, trenutno Gradle ne podržava generiranje praznog projekta, detaljne informacije nalaze se na web stranici udžbenik.

ekspanzija

Quarkus je proširiv okvir. Trenutno postoji narudžba 40 nastavaka, koji dodaju razne funkcionalnosti – od podrške Opruga DI spremnik и Apache Camel prije zapisivanja i objavljivanja metrike za pokrenute usluge. I već postoji proširenje za podršku pisanja aplikacija u Kotlinu, uz Javu.

Zaključak

Po mom mišljenju, Quarkus je sasvim u skladu s trendovima vremena. Razvoj pozadinskog koda postaje sve lakši i lakši, a ovaj okvir dodatno pojednostavljuje i ubrzava razvoj usluge dodavanjem izvorne podrške za Docker i Kubernetes. Veliki plus je ugrađena podrška za GraalVM i generiranje slika ovisnih o platformi, što omogućuje da se usluge pokreću vrlo brzo i zauzimaju malo memorijskog prostora. A to je vrlo važno u naše vrijeme masovne strasti za mikroservisima i arhitekturom bez poslužitelja.

Službena stranica - quarkus.io. Primjeri projekata za brzi početak već su dostupni na GitHub.

Izvor: www.habr.com

Dodajte komentar