Hōʻike
Ma Malaki XNUMXth, RedHat (koke koke IBM)
ʻO ka pahuhopu e hoʻolilo iā Java i kahua alakaʻi no ka hoʻolaha ʻana o Kubernetes a me ka hoʻomohala ʻana i nā noi serverless, e hāʻawi ana i nā mea hoʻomohala i kahi ala hoʻomohala i ka hoʻomohala ʻana i nā ʻano reactive a imperative.
Inā ʻoe e nānā
Kiʻekiʻe loa ka wikiwiki o ka hoʻomaka ʻana o ka noi a me ka hoʻohana haʻahaʻa hoʻomanaʻo. Eia ka ʻikepili mai ka punaewele o ka mea hoʻomohala:
Ka manawa mai ka hoʻomaka a hiki i ka pane mua (s):
Kauoa
koena
HOOMAHA+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Puʻupuʻu Kapua Kuʻuna Native*
4.3
9.5
Hoʻohana hoʻomanaʻo (Mb):
Kauoa
koena
HOOMAHA+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Puʻupuʻu Kapua Kuʻuna Native*
140
218
Kahaha, 'a'ole anei?
*ʻAʻole i loaʻa iaʻu kekahi ʻike e pili ana i kēia ʻenehana ʻenehana, hiki iā mākou ke manaʻo he ʻano Spring Boot kēia me kahi pahu kino hou..
Hello Aloha!
ʻO ka palapala noi maʻalahi i kākau ʻia ma Quarkus e like me kēia:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
Hoʻokahi papa maoli ia a ua lawa kēlā! Hiki iā ʻoe ke holo i ka noi me ka hoʻohana ʻana iā Maven i ke ʻano hoʻomohala:
mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello
ʻO ka ʻokoʻa mai kahi noi maʻamau ʻaʻohe papa noi! Kākoʻo ʻo Quarkus i ka hoʻouka hou ʻana, no laila hiki iā ʻoe ke hoʻololi i kāu noi me ka ʻole o ka hoʻomaka hou ʻana, e ʻoi aku ka wikiwiki o ka hoʻomohala ʻana.
He aha ka hope? Hiki iā ʻoe ke hoʻohui i kahi lawelawe i kahi kaohi me ka hoʻohana ʻana i kahi annotation
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Mea hooponopono:
@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!
E hoʻomanaʻo e hoʻohana ʻo Quarkus i nā annotation maʻamau mai nā frameworks maʻamau - CDI a me JAX-RS. ʻAʻohe pono e aʻo i kahi mea hou inā ua hana ʻoe me CDI a me JAX-RS ma mua, ʻoiaʻiʻo.
Ke hana nei me ka waihona
Hoʻohana ʻia nā hōʻike hibernate a me JPA maʻamau no nā hui. E like me nā mea hoʻokele REST, pono ʻoe e kākau i kahi helu liʻiliʻi. Ua lawa ia e hōʻike i nā hilinaʻi i ka faila hui, hoʻohui i nā annotations @Entity
a hoʻonohonoho i ka ʻikepili ma application.properties.
ʻO nā mea a pau. ʻAʻohe sessionFactory, persistence.xml a i ʻole nā faila lawelawe ʻē aʻe. Kākau mākou i ke code e pono ai. Eia nō naʻe, inā pono, hiki iā ʻoe ke hana i kahi faila persistence.xml a hoʻonohonoho maikaʻi i ka papa ORM.
Kākoʻo ʻo Quarkus i ka mālama ʻana i nā hui, nā hōʻiliʻili no nā pilina hoʻokahi-a-nui, a me nā nīnau. I ka nānā mua ʻana he nani ia, akā ʻo ia kūloko caching, no hoʻokahi node Kubernetes. ʻO kēlā mau. ʻAʻole i hui pū ʻia nā huna o nā node like ʻole me kekahi. Manaʻo wau he manawa pōkole kēia.
Hoʻokō code Asynchronous
E like me ka mea i ʻōlelo ʻia ma luna, kākoʻo pū ʻo Quarkus i ke ʻano papahana reactive. Hiki ke kākau ʻia ke code o ka noi mua ma kahi ʻano ʻokoʻa.
@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 + "!";
});
}
}
Hiki ke hoʻololi ʻia ke code Asynchronous i ka lawelawe, e like ka hopena.
Hoʻoponopono
Hiki ke kākau ʻia nā hoʻokolohua no nā noi Quarkus ma JUnit4 a i ʻole JUnit5. Aia ma lalo kahi hōʻike hoʻohālike no kahi hopena, ua kākau ʻia me ka RestAssured, akā hiki ke hoʻohana ʻia kahi ʻano hana ʻē aʻe:
@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 + "!"));
}
}
Aʻo ka @QuarkusTest annotation iā ʻoe e holo i ka noi ma mua o ka holo ʻana i nā hoʻokolohua. ʻO ke koena he code i kamaʻāina i nā mea hoʻomohala āpau.
Papahana kiko'ī
No ka mea ua hoʻopili paʻa ʻia ʻo Quarkus me GraalVM, ʻoiaʻiʻo nō hiki ke hana i nā code kikoʻī platform. No ka hana ʻana i kēia, pono ʻoe e hoʻokomo iā GraalVM a kuhikuhi i ka GRAALVM_HOME hoʻololi kaiapuni. Eia hou aku
mvn package -Pnative
ʻO ka mea hoihoi, hiki ke hoʻāʻo ʻia ka noi i hana ʻia. A he mea koʻikoʻi kēia no ka mea ʻokoʻa ka hoʻokō ʻana i ke code maoli mai ka hoʻokō ʻana ma ka JVM. Ka @SubstrateTest annotation e holo ana i ka helu palapala noi kahua kahua. Hiki ke hoʻohana hou ʻia ke code hoʻāʻo i kēia manawa me ka hoʻoilina; ʻo ka hopena, e like ke ʻano o ke code no ka hoʻāʻo ʻana i kahi noi e pili ana i ka platform:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
Hiki ke hoʻopili ʻia ke kiʻi i hana ʻia ma Docker a holo i Kubernetes a i ʻole OpenShift, i wehewehe kikoʻī ʻia ma
Kākoʻo lāʻau
Hiki ke hoʻohana ʻia ka hana Quarkus me Maven a me Gradle. Kākoʻo piha ʻia ʻo Maven, ʻaʻole like me Gradle. ʻO ka mea pōʻino, i kēia manawa ʻaʻole kākoʻo ʻo Gradle i ka hana ʻana i kahi papahana ʻole; aia nā ʻike kikoʻī ma ka pūnaewele
Hoʻohui
ʻO Quarkus kahi hoʻolālā hoʻonui. I kēia manawa aia kahi kauoha
hopena
I koʻu manaʻo, ua kūpono ʻo Quarkus me nā ʻano o ka wā. E maʻalahi a maʻalahi ka hoʻomohala ʻana i nā code backend, a ua maʻalahi kēia ʻano hana a me ka wikiwiki i ka hoʻomohala lawelawe ma o ka hoʻohui ʻana i ke kākoʻo maoli no Docker a me Kubernetes. ʻO kahi hoʻohui nui ke kākoʻo i kūkulu ʻia no GraalVM a me ka hoʻokumu ʻana i nā kiʻi hilinaʻi platform, e hiki ai i nā lawelawe ke hoʻomaka koke a lawe i kahi wahi hoʻomanaʻo liʻiliʻi. A he mea koʻikoʻi kēia i ko mākou manawa makemake nui no nā microservices a me ka hoʻolālā serverless.
Paena kūhelu -
Source: www.habr.com