Entwodiksyon
Sou XNUMX mas, RedHat (byento IBM)
Objektif la se fè Java platfòm dirijan pou deplwaman Kubernetes ak devlopman aplikasyon san sèvè, bay devlopè yo yon apwòch inifye nan devlopman nan tou de estil reyaktif ak enperatif.
Gade
Yo pwomèt vitès trè wo nan lansman aplikasyon ak konsomasyon memwa ki ba. Men done ki soti nan sit entènèt pwomotè a:
Tan depi kòmansman pou premye repons (yo):
Konfigirasyon
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Tradisyonèl Cloud Native Stack*
4.3
9.5
Konsomasyon memwa (Mb):
Konfigirasyon
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Tradisyonèl Cloud Native Stack*
140
218
Enpresyonan, pa vre?
*Mwen pa t 'jwenn okenn enfòmasyon sou pil teknoloji sa a, nou ka asime ke sa a se yon kalite Spring Boot ak yon twous kò adisyonèl..
Alo Mondyal!
Aplikasyon ki pi senp ekri nan Quarkus ta sanble sa a:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
Li se literalman yon sèl klas ak sa a ase! Ou ka kouri aplikasyon an lè l sèvi avèk Maven nan mòd devlopman:
mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello
Diferans ak yon aplikasyon regilye se ke pa gen okenn klas aplikasyon! Quarkus sipòte rechajman cho, kidonk, ou ka chanje aplikasyon w lan san rekòmanse li, sa ki fè devlopman menm pi vit.
Ki sa kap vini? Ou ka ajoute yon sèvis nan yon kontwolè lè l sèvi avèk yon anotasyon
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Kontwolè:
@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!
Remake byen ke Quarkus sèvi ak anotasyon estanda ki soti nan kad abitye - CDI ak JAX-RS. Pa gen okenn nesesite pou aprann anyen nouvo si ou te travay ak CDI ak JAX-RS anvan, nan kou.
Travay ak baz done a
Hibernate ak anotasyon JPA estanda pou antite yo itilize. Menm jan ak contrôleur REST, ou bezwen ekri yon minimòm de kòd. Li ase pou endike depandans yo nan dosye asanble a, ajoute annotations @Entity
epi configured datasource nan application.properties.
Tout. Pa gen sessionFactory, persistence.xml oswa lòt dosye sèvis. Nou ekri sèlman kòd ki nesesè. Sepandan, si sa nesesè, ou ka kreye yon fichye persistence.xml ak konfigirasyon kouch ORM a pi byen.
Quarkus sipòte kachèt antite, koleksyon pou relasyon youn a plizyè, ak demann. Nan premye gade li sanble gwo, men li la lokal kachèt, pou yon sèl ne Kubernetes. Moun sa yo. Kachèt diferan nœuds yo pa senkronize youn ak lòt. Mwen espere ke sa a se tanporè.
Asynchrone kòd ekzekisyon
Kòm mansyone pi wo a, Quarkus sipòte tou style nan pwogram reyaktif. Kòd aplikasyon anvan an ka ekri nan yon fòm diferan.
@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 + "!";
});
}
}
Kòd asynchrone kapab tou transfere nan sèvis la, rezilta a pral menm.
Tès
Yo ka ekri tès pou aplikasyon Quarkus nan JUnit4 oswa JUnit5. Anba a se yon egzanp tès pou yon pwen final, li ekri lè l sèvi avèk RestAssured, men yo ka itilize yon lòt kad:
@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 + "!"));
}
}
Anotasyon @QuarkusTest enstwi w pou w kouri aplikasyon an anvan w fè tès yo. Rès la se kòd abitye nan tout devlopè.
Aplikasyon espesifik pou platfòm
Depi Quarkus se byen entegre ak GraalVM, li se nan kou posib jenere kòd platfòm espesifik. Pou fè sa, ou bezwen enstale GraalVM epi presize varyab anviwònman GRAALVM_HOME. Pli lwen
mvn package -Pnative
Enteresan, aplikasyon an pwodwi yo ka teste. Epi sa a enpòtan paske ekzekisyon kòd natif natal ka diferan de ekzekisyon sou JVM la. Anotasyon @SubstrateTest la kouri kòd aplikasyon espesifik pou platfòm. Ou ka fè re-itilize kòd tès ki egziste deja lè l sèvi avèk eritaj; kòm yon rezilta, kòd pou teste yon aplikasyon ki depann sou platfòm la pral sanble sa a:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
Imaj ki pwodwi a ka pake nan Docker epi kouri nan Kubernetes oswa OpenShift, ki dekri an detay nan
Zouti
Ka kad Quarkus la dwe itilize ak Maven ak Gradle. Maven konplètman sipòte, kontrèman ak Gradle. Malerezman, nan moman sa a Gradle pa sipòte jenere yon pwojè vid; gen enfòmasyon detaye sou sit entènèt la.
Ekstansyon
Quarkus se yon kad extensible. Kounye a gen yon lòd
Konklizyon
Dapre mwen, Quarkus se byen nan liy ak tandans yo nan tan an. Devlopman kòd backend ap vin pi fasil ak pi fasil, ak kad sa a plis senplifye ak akselere devlopman sèvis lè li ajoute sipò natif natal pou Docker ak Kubernetes. Yon gwo plis se sipò entegre pou GraalVM ak jenerasyon imaj ki depann sou platfòm, ki pèmèt sèvis yo kòmanse vrèman byen vit epi pran ti espas memwa. Ak sa a trè enpòtan nan tan nou an nan pasyon mas pou mikwosèvis ak achitekti san sèvè.
Sit ofisyèl -
Sous: www.habr.com