Sarrera
Martxoaren XNUMXan, RedHat (laster IBM)
Helburua Java Kubernetes inplementatzeko eta zerbitzaririk gabeko aplikazioen garapenerako plataforma nagusi bihurtzea da, garatzaileei garapenerako ikuspegi bateratua eskainiz, estilo erreaktibo zein inperatiboetan.
Begiratuz gero
Aplikazioak abiarazteko abiadura oso handia eta memoria-kontsumo txikia agintzen dira. Hona hemen garatzailearen webguneko datuak:
Hasieratik lehenengo erantzuna (k):
konfigurazioa
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Hodeiaren jatorrizko pila tradizionala*
4.3
9.5
Memoria-kontsumoa (Mb):
konfigurazioa
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Hodeiaren jatorrizko pila tradizionala*
140
218
Ikusgarria, ezta?
*Ez nuen teknologia pila honi buruzko informaziorik aurkitu, pentsa dezakegu hau Spring Boot moduko bat dela gorputz-kit osagarri batekin.
Kaixo Mundua!
Quarkus-en idatzitako aplikaziorik errazena honelakoa litzateke:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
Klase bakarra da literalki eta nahikoa da! Aplikazioa Maven erabiliz exekutatu dezakezu garapen moduan:
mvn compile quarkus:dev
β¦
$ curl http://localhost:8080/hello
hello
Aplikazio arrunt baten aldea da Aplikazio klaserik ez dagoela! Quarkus-ek birkarga beroa onartzen du, beraz, zure aplikazioa alda dezakezu berrabiarazi gabe, garapena are azkarrago eginez.
Zer da hurrengoa? Kontrolagailu bati zerbitzu bat gehi diezaiokezu ohar bat erabiliz
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Kontrolatzailea:
@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!
Kontuan izan Quarkusek ohiko esparruetako oharpen estandarrak erabiltzen dituela - CDI eta JAX-RS. Ez dago ezer berririk ikasi beharrik aurretik CDI eta JAX-RSekin lan egin baduzu, noski.
Datu-basearekin lan egitea
Hibernate eta entitateentzako JPA oharpen estandarrak erabiltzen dira. REST kontrolagailuekin bezala, gutxieneko kode bat idatzi behar duzu. Nahikoa da muntaketa fitxategian mendekotasunak adieraztea, oharrak gehitzea @Entity
eta konfiguratu datu-iturburua aplikazioan.properties.
Denak. Ez dago sessionFactory, persistence.xml edo bestelako zerbitzu fitxategirik. Behar den kodea bakarrik idazten dugu. Hala ere, beharrezkoa bada, persistence.xml fitxategi bat sor dezakezu eta ORM geruza finago konfigura dezakezu.
Quarkus-ek entitateen cachean gordetzea onartzen du, bat-bateko harremanetarako bildumak eta kontsultak. Lehen begiratuan bikaina dirudi, baina hala da local cachean gordetzea, Kubernetes nodo baterako. Horiek. Nodo ezberdinen cacheak ez daude elkarren artean sinkronizatuta. Espero dut hau behin-behinekoa izatea.
Kode asinkronoaren exekuzioa
Goian aipatu bezala, Quarkusek programazio estilo erreaktiboa ere onartzen du. Aurreko aplikazioaren kodea beste forma batean idatz daiteke.
@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 + "!";
});
}
}
Kode asinkronoa ere transferitu daiteke zerbitzura, emaitza berdina izango da.
Testing
Quarkus aplikazioetarako probak JUnit4 edo JUnit5-en idatz daitezke. Jarraian, amaierako puntu baten proba adibide bat dago, RestAssured erabiliz idatzita dago, baina beste marko bat erabil daiteke:
@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 + "!"));
}
}
@QuarkusTest oharrak aplikazioa exekutatzeko agintzen dizu probak egin aurretik. Gainerakoa garatzaile guztientzat ezaguna da kodea.
Plataformarako berariazko aplikazioa
Quarkus GraalVM-rekin oso integratuta dagoenez, noski posible da plataformako berariazko kodea sortzea. Horretarako, GraalVM instalatu eta GRAALVM_HOME ingurune-aldagaia zehaztu behar duzu. Aurrerago
mvn package -Pnative
Interesgarria da, sortutako aplikazioa probatu daiteke. Eta hori garrantzitsua da jatorrizko kodearen exekuzioa JVMn exekutatzeko desberdina izan daitekeelako. @SubstrateTest oharrak plataformako aplikazio-kode espezifikoa exekutatzen du. Lehendik dagoen proba-kodea berrerabili herentzia erabiliz egin daiteke; ondorioz, plataformaren araberako aplikazio bat probatzeko kodea honela izango da:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
Sortutako irudia Docker-en paketatu eta Kubernetes edo OpenShift-en exekutatu daiteke, xehetasunez deskribatuta
tresnak
Quarkus markoa Maven eta Gradle-rekin erabil daiteke. Maven guztiz onartzen da, Gradle ez bezala. Zoritxarrez, momentuz Gradle-k ez du onartzen proiektu huts bat sortzea; webgunean informazio zehatza dago.
hedapen
Quarkus marko hedagarria da. Gaur egun eskaera bat dago
Ondorioa
Nire ustez, Quarkus garaiko joerekin nahiko bat dator. Backend kodearen garapena gero eta errazagoa da, eta esparru honek zerbitzuen garapena gehiago sinplifikatzen eta bizkortzen du Docker eta Kubernetes-en jatorrizko laguntza gehituz. Abantaila handi bat GraalVM-ren euskarri integratua eta plataformaren araberako irudiak sortzea da, eta horrek zerbitzuak oso azkar abiarazteko aukera ematen du eta memoria leku gutxi hartzen du. Eta hori oso garrantzitsua da mikrozerbitzuetarako eta zerbitzaririk gabeko arkitekturarako pasio masiboaren garaian.
Webgune ofiziala -
Iturria: www.habr.com