Uvod
XNUMX. ožujka RedHat (uskoro IBM)
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
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
@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
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
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
ekspanzija
Quarkus je proširiv okvir. Trenutno postoji narudžba
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 -
Izvor: www.habr.com