Quarkus se yon Java subatomik supèrsonik. Brèf apèsi sou kad la

Quarkus se yon Java subatomik supèrsonik. Brèf apèsi sou kad la

Entwodiksyon

Sou XNUMX mas, RedHat (byento IBM) prezante nouvo kad - Karkus. Dapre devlopè yo, fondasyon sa a baze sou GraalVM ak OpenJDK HotSpot epi li fèt pou Kubernetes. Pile Quarkus la gen ladann: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus ak lòt moun.

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 sa a klasifikasyon nan kad, Lè sa a, Quarkus se yon kote ant "Agrégateur / Kòd Jeneratè" ak "High-nivo fullstack kad". Sa a se deja plis pase yon agrégateur, men li pa menm rive nan plen pil, paske ... pwepare pou devlopman backend.

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 Enjekte. Kòd sèvis:

@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 enskri yon pwofil pou asanble epi presize li lè w ap bati aplikasyon an:

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 enstriksyon.

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. liv.

Ekstansyon

Quarkus se yon kad extensible. Kounye a gen yon lòd 40 ekstansyon, ki ajoute fonksyonalite divès kalite - soti nan sipò Spring DI veso и Apache chamo anvan antre ak pibliye mezi pou kouri sèvis yo. Epi gen deja yon ekstansyon pou sipòte aplikasyon ekri nan Kotlin, anplis Java.

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 - quarkus.io. Egzanp pwojè pou yon demaraj rapid yo deja disponib sou GitHub.

Sous: www.habr.com

Add nouvo kòmantè