Mau oyamba
Pa Marichi XNUMX, RedHat (posachedwa IBM)
Cholinga ndikupangitsa Java kukhala nsanja yotsogola pakutumiza kwa Kubernetes komanso chitukuko cha pulogalamu yopanda seva, kupatsa otukula njira yolumikizana yachitukuko mumitundu yonse yokhazikika komanso yofunikira.
Ngati muyang'ana
Kuthamanga kwambiri koyambitsa ntchito komanso kugwiritsa ntchito kukumbukira kochepa kumalonjezedwa. Nayi zomwe zachokera patsamba la wopanga:
Nthawi kuyambira koyambira mpaka kuyankha koyamba (m):
Kukhazikika
Bwerani
REST + JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Traditional Cloud Native Stack*
4.3
9.5
Kugwiritsa ntchito kukumbukira (Mb):
Kukhazikika
Bwerani
REST + JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Traditional Cloud Native Stack*
140
218
Zochititsa chidwi, sichoncho?
*Sindinapeze chidziwitso chilichonse chokhudza ukadaulo uwu, titha kuganiza kuti uwu ndi mtundu wina wa Spring Boot wokhala ndi zida zowonjezera zathupi..
Moni Dziko Lapansi!
Kugwiritsa ntchito kosavuta kolembedwa mu Quarkus kungawoneke motere:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
Ndi kalasi imodzi ndipo ndi zokwanira! Mutha kuyendetsa pulogalamuyi pogwiritsa ntchito Maven mumayendedwe achitukuko:
mvn compile quarkus:dev
β¦
$ curl http://localhost:8080/hello
hello
Kusiyanitsa ndi kugwiritsa ntchito nthawi zonse ndikuti palibe kalasi ya Application! Quarkus imathandizira kutsitsanso kotentha, kotero mutha kusintha pulogalamu yanu osayiyambitsanso, ndikupanga chitukuko mwachangu.
Chotsatira ndi chiyani? Mutha kuwonjezera ntchito kwa wowongolera pogwiritsa ntchito mawu ofotokozera
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Wowongolera:
@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!
Zindikirani kuti Quarkus amagwiritsa ntchito zofotokozera zamtundu wodziwika bwino - CDI ndi JAX-RS. Palibe chifukwa chophunzirira chatsopano ngati mudagwirapo ntchito ndi CDI ndi JAX-RS m'mbuyomu, inde.
Kugwira ntchito ndi database
Hibernate ndi zofotokozera za JPA zamagulu zimagwiritsidwa ntchito. Monga ndi olamulira a REST, muyenera kulemba ma code osachepera. Ndikokwanira kusonyeza kudalira mu fayilo ya msonkhano, onjezerani ndemanga @Entity
ndi kukonza datasource mu application.properties.
Zonse. Palibe sessionFactory, persistence.xml kapena mafayilo ena othandizira. Timalemba code yomwe ikufunika. Komabe, ngati kuli kofunikira, mutha kupanga fayilo ya persistence.xml ndikusintha gawo la ORM bwino kwambiri.
Quarkus imathandizira kusungitsa mabungwe, zosonkhanitsira maubwenzi amodzi ndi ambiri, ndi mafunso. Poyang'ana koyamba zikuwoneka bwino, koma ndizo kwanuko caching, pa mfundo imodzi ya Kubernetes. Iwo. Ma cache a ma node osiyanasiyana samalumikizidwa wina ndi mnzake. Ndikukhulupirira kuti izi ndi zakanthawi.
Asynchronous code execution
Monga tafotokozera pamwambapa, Quarkus imathandiziranso kalembedwe kameneka. Khodi ya pulogalamu yam'mbuyomu ikhoza kulembedwa mwanjira ina.
@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 + "!";
});
}
}
Khodi ya Asynchronous imathanso kusamutsidwa ku utumiki, zotsatira zake zidzakhala zofanana.
Kuyesa
Mayeso a mapulogalamu a Quarkus amatha kulembedwa mu JUnit4 kapena JUnit5. Pansipa pali chiyeso chakumapeto, chalembedwa pogwiritsa ntchito RestAssured, koma chimango china chingagwiritsidwe ntchito:
@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 + "!"));
}
}
Ndemanga ya @QuarkusTest imakulangizani kuyendetsa pulogalamu musanayese mayeso. Zina zonse ndizodziwika kwa onse opanga mapulogalamu.
Kugwiritsa ntchito papulatifomu
Popeza Quarkus imaphatikizidwa mwamphamvu ndi GraalVM, ndizotheka kupanga code yeniyeni ya pulatifomu. Kuti muchite izi, muyenera kukhazikitsa GraalVM ndikutchula GRAALVM_HOME zosinthika zachilengedwe. Komanso
mvn package -Pnative
Chochititsa chidwi n'chakuti, pulogalamu yopangidwa ikhoza kuyesedwa. Ndipo izi ndi zofunika chifukwa kuphedwa kwa code komweko kumatha kusiyana ndi kuphedwa pa JVM. Ndemanga za @SubstrateTest zimakhala ndi khodi yapapulatifomu. Kugwiritsanso ntchito mayeso omwe alipo kale kutha kuchitidwa pogwiritsa ntchito cholowa; Zotsatira zake, code yoyesa pulogalamu yodalira nsanja idzawoneka motere:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
Chithunzi chopangidwa chitha kupakidwa mu Docker ndikuyendetsa Kubernetes kapena OpenShift, yofotokozedwa mwatsatanetsatane
Chida
Mapangidwe a Quarkus angagwiritsidwe ntchito ndi Maven ndi Gradle. Maven amathandizidwa kwathunthu, mosiyana ndi Gradle. Tsoka ilo, pakadali pano Gradle sichikuthandizira kupanga pulojekiti yopanda kanthu; pali zambiri zatsatanetsatane patsamba
Zowonjezera
Quarkus ndi chimango chowonjezera. Panopa pali dongosolo
Pomaliza
Malingaliro anga, Quarkus imagwirizana kwambiri ndi zomwe zikuchitika panthawiyo. Kupanga ma code backend kukukhala kosavuta komanso kosavuta, ndipo chimangochi chimathandizira ndikufulumizitsa chitukuko cha ntchito powonjezera chithandizo chamtundu wa Docker ndi Kubernetes. Chowonjezera chachikulu ndikuthandizira kwa GraalVM komanso kupanga zithunzi zotengera nsanja, zomwe zimalola kuti mautumiki ayambe mwachangu komanso kutenga malo okumbukira pang'ono. Ndipo izi ndizofunikira kwambiri munthawi yathu yokonda kwambiri ma microservices ndi zomangamanga zopanda seva.
Tsamba lovomerezeka -
Source: www.habr.com