Pasiuna
Sa Marso XNUMX, RedHat (sa dili madugay IBM)
Ang tumong mao ang paghimo sa Java nga nag-unang plataporma alang sa Kubernetes deployment ug serverless application development, nga naghatag sa mga developers og usa ka hiniusang pamaagi sa kalamboan sa reaktibo ug imperative nga mga estilo.
Kung imong tan-awon
Taas kaayo nga tulin sa paglansad sa aplikasyon ug ubos nga konsumo sa memorya ang gisaad. Ania ang datos gikan sa website sa developer:
Oras gikan sa pagsugod hangtod sa unang tubag (mga):
Pagsalig
PAHULAY
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Tradisyonal nga Cloud Native Stack*
4.3
9.5
Konsumo sa memorya (Mb):
Pagsalig
PAHULAY
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Tradisyonal nga Cloud Native Stack*
140
218
Impressive, dili ba?
*Wala koy nakit-an nga bisan unsang kasayuran bahin sa kini nga stack sa teknolohiya, mahimo naton hunahunaon nga kini usa ka matang sa Spring Boot nga adunay dugang nga body kit..
Kumusta Kalibutan!
Ang pinakasimple nga aplikasyon nga gisulat sa Quarkus mahimong ingon niini:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
Kini usa ka klase ug igo na kana! Mahimo nimong ipadagan ang aplikasyon gamit ang Maven sa mode sa pag-uswag:
mvn compile quarkus:dev
β¦
$ curl http://localhost:8080/hello
hello
Ang kalainan sa usa ka regular nga aplikasyon mao nga walay klase sa Application! Gisuportahan sa Quarkus ang mainit nga pag-reload, aron mabag-o nimo ang imong aplikasyon nga wala kini i-restart, nga labi ka paspas ang pag-uswag.
Unsay sunod? Mahimo nimong idugang ang usa ka serbisyo sa usa ka controller gamit ang usa ka anotasyon
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Controller:
@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!
Timan-i nga gigamit ni Quarkus ang mga sumbanan nga anotasyon gikan sa pamilyar nga mga balangkas - CDI ug JAX-RS. Dili kinahanglan nga makakat-on bisan unsa nga bag-o kung nagtrabaho ka sa CDI ug JAX-RS kaniadto, siyempre.
Pagtrabaho uban sa database
Ang hibernate ug standard nga JPA annotation para sa mga entidad gigamit. Sama sa REST controllers, kinahanglan nimong isulat ang labing gamay nga code. Igo na nga ipaila ang mga dependency sa assembly file, idugang ang mga anotasyon @Entity
ug i-configure ang datasource sa application.properties.
Tanan. Walay sessionFactory, persistence.xml o uban pang service files. Gisulat lang namo ang code nga gikinahanglan. Apan, kung gikinahanglan, makahimo ka og persistence.xml file ug i-configure ang ORM layer nga mas maayo.
Gisuportahan sa Quarkus ang pag-cache sa mga entidad, mga koleksyon alang sa usa-sa-daghang mga relasyon, ug mga pangutana. Sa una nga pagtan-aw kini nindot tan-awon, apan kini lokal caching, alang sa usa ka Kubernetes node. Mga. Ang mga cache sa lain-laing mga node wala ma-synchronize sa usag usa. Manghinaut ko nga kini temporaryo.
Asynchronous nga pagpatuman sa code
Sama sa gihisgutan sa ibabaw, gisuportahan usab ni Quarkus ang reaktibo nga istilo sa programming. Ang code sa miaging aplikasyon mahimong isulat sa lahi nga porma.
@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 + "!";
});
}
}
Ang asynchronous code mahimo usab nga ibalhin sa serbisyo, ang resulta parehas.
Pagsulay
Ang mga pagsulay alang sa mga aplikasyon sa Quarkus mahimong isulat sa JUnit4 o JUnit5. Sa ubos usa ka pananglitan nga pagsulay alang sa usa ka katapusan nga punto, kini gisulat gamit ang RestAssured, apan ang lain nga balangkas mahimong magamit:
@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 + "!"));
}
}
Ang @QuarkusTest annotation nagmando kanimo sa pagpadagan sa aplikasyon sa dili pa magpadagan sa mga pagsulay. Ang nahabilin mao ang code nga pamilyar sa tanan nga mga developer.
Aplikasyon nga espesipiko sa plataporma
Tungod kay ang Quarkus hugot nga gisagol sa GraalVM, siyempre posible nga makamugna og code nga espesipiko sa plataporma. Aron mahimo kini, kinahanglan nimo nga i-install ang GraalVM ug ipiho ang GRAALVM_HOME environment variable. Dugang pa
mvn package -Pnative
Makapainteres, ang nahimo nga aplikasyon mahimong masulayan. Ug kini hinungdanon tungod kay ang pagpatuman sa lumad nga kodigo mahimong lahi sa pagpatuman sa JVM. Ang @SubstrateTest annotation nagpadagan sa code sa aplikasyon nga espesipiko sa plataporma. Ang paggamit pag-usab sa kasamtangan nga code sa pagsulay mahimong buhaton gamit ang kabilin; isip resulta, ang code alang sa pagsulay sa usa ka aplikasyon nga nagsalig sa plataporma mahimong sama niini:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
Ang namugna nga imahe mahimong ma-package sa Docker ug modagan sa Kubernetes o OpenShift, nga gihulagway sa detalye sa
Toolkit
Ang balangkas sa Quarkus mahimong magamit sa Maven ug Gradle. Ang Maven hingpit nga gisuportahan, dili sama sa Gradle. Ikasubo, sa pagkakaron wala gisuportahan sa Gradle ang paghimo og walay sulod nga proyekto; adunay detalyado nga impormasyon sa website
Mga ekstensiyon
Ang Quarkus usa ka mapalapad nga balangkas. Sa pagkakaron naay order
konklusyon
Sa akong opinyon, ang Quarkus nahiuyon sa mga uso sa panahon. Ang pag-uswag sa backend code nahimong mas sayon ββug mas sayon, ug kini nga balangkas mas gipasimple ug gipadali ang pagpalambo sa serbisyo pinaagi sa pagdugang sa lumad nga suporta alang sa Docker ug Kubernetes. Ang usa ka dako nga dugang mao ang built-in nga suporta alang sa GraalVM ug ang henerasyon sa mga imahe nga nagsalig sa platform, nga nagtugot sa mga serbisyo nga magsugod dayon ug makakuha gamay nga espasyo sa memorya. Ug kini hinungdanon kaayo sa atong panahon sa mass passion alang sa microservices ug serverless architecture.
Opisyal nga site -
Source: www.habr.com