Uvod
XNUMX. marta, RedHat (uskoro IBM)
Cilj je da Java postane vodeća platforma za primenu Kubernetesa i razvoj aplikacija bez servera, pružajući programerima jedinstven pristup razvoju u reaktivnim i imperativnim stilovima.
Gledam
Obećana je vrlo velika brzina pokretanja aplikacije i mala potrošnja memorije. Evo podataka sa web stranice programera:
Vrijeme od početka do prvog odgovora (s):
Konfiguracija
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Tradicionalni Cloud izvorni stog*
4.3
9.5
Potrošnja memorije (Mb):
Konfiguracija
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Tradicionalni Cloud izvorni stog*
140
218
Impresivno, zar ne?
*Nisam pronašao nikakve informacije o ovoj tehnologiji, možemo pretpostaviti da je ovo neka vrsta Spring Boot-a sa dodatnim body kitom.
Hello World!
Najjednostavnija aplikacija napisana u Quarkusu bi izgledala ovako:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
To je bukvalno jedan čas 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 ne postoji klasa aplikacije! Quarkus podržava ponovno učitavanje, tako da možete promijeniti svoju aplikaciju bez ponovnog pokretanja, čineći razvoj još bržim.
Šta je sledeće? Možete dodati uslugu kontroleru pomoću napomene
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Kontroler:
@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 napomene iz poznatih okvira - CDI i JAX-RS. Nema potrebe učiti ništa novo ako ste ranije radili sa CDI i JAX-RS, naravno.
Rad sa bazom podataka
Koriste se hibernacije i standardne JPA napomene za entitete. Kao i kod REST kontrolera, morate napisati minimum koda. Dovoljno je naznačiti zavisnosti u datoteci sklopa, dodati napomene @Entity
i konfigurirajte izvor podataka u aplikaciji.properties.
Sve. Nema sessionFactory, persistence.xml ili drugih servisnih datoteka. Pišemo samo onaj kod koji je potreban. Međutim, ako je potrebno, možete kreirati datoteku persistence.xml i finije konfigurirati ORM sloj.
Quarkus podržava keširanje entiteta, kolekcije za odnose jedan prema više i upite. Na prvi pogled izgleda odlično, ali tako je lokalno keširanje, za jedan Kubernetes čvor. One. Keš memorije različitih čvorova nisu međusobno sinkronizirane. Nadam se da je ovo privremeno.
Asinkrono izvršavanje koda
Kao što je gore pomenuto, Quarkus takođe podržava reaktivni stil programiranja. Šifra prethodne aplikacije 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 + "!";
});
}
}
Asinhroni kod se također može prenijeti na servis, rezultat će biti isti.
Testiranje
Testovi za Quarkus aplikacije mogu biti napisani u JUnit4 ili JUnit5. Ispod je primjer testa za krajnju tačku, napisan je koristeći RestAssured, ali se može 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 + "!"));
}
}
Napomena @QuarkusTest upućuje vas da pokrenete aplikaciju prije pokretanja testova. Ostalo je kod poznat svim programerima.
Aplikacija specifična za platformu
Budući da je Quarkus čvrsto integriran sa GraalVM-om, naravno moguće je generirati specifičan kod za platformu. Da biste to učinili, trebate instalirati GraalVM i navesti varijablu okruženja GRAALVM_HOME. Dalje
mvn package -Pnative
Zanimljivo je da se generirana aplikacija može testirati. A ovo je važno jer se izvršavanje izvornog koda može razlikovati od izvršavanja na JVM-u. @SubstrateTest napomena pokreće kod aplikacije specifičan za platformu. Ponovno korištenje postojećeg testnog koda može se obaviti korištenjem nasljeđivanja; kao rezultat toga, kod za testiranje aplikacije zavisne od platforme će izgledati ovako:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
Generirana slika se može upakovati u Docker i pokrenuti u Kubernetes ili OpenShift, detaljno opisano u
Toolkit
Quarkus okvir se može koristiti sa Maven i Gradle. Maven je u potpunosti podržan, za razliku od Gradlea. Nažalost, u ovom trenutku Gradle ne podržava generiranje praznog projekta; detaljne informacije postoje na web stranici
Extensions
Quarkus je proširivi okvir. Trenutno postoji narudžba
zaključak
Po mom mišljenju, Quarkus je sasvim u skladu sa trendovima tog vremena. Razvoj pozadinskog koda postaje sve lakši i lakši, a ovaj okvir dodatno pojednostavljuje i ubrzava razvoj usluga dodavanjem izvorne podrške za Docker i Kubernetes. Ogroman plus je ugrađena podrška za GraalVM i generiranje slika zavisnih od platforme, što omogućava da se servisi počnu vrlo brzo i zauzimaju malo memorijskog prostora. A ovo je veoma važno u našem vremenu masovne strasti za mikroservisima i arhitekturom bez servera.
Zvanična stranica -
izvor: www.habr.com