Quarkus ndeye supersonic subatomic Java. Muchidimbu muchidimbu chechimiro

Quarkus ndeye supersonic subatomic Java. Muchidimbu muchidimbu chechimiro

Nhanganyaya

Musi waKurume XNUMXth, RedHat (nenguva pfupi IBM) yakaunzwa chimiro chitsva - quarkus. Sekureva kwevagadziri, chimiro ichi chakavakirwa paGraalVM uye OpenJDK HotSpot uye yakagadzirirwa Kubernetes. Iyo Quarkus stack inosanganisira: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus nevamwe.

Chinangwa ndechekuita kuti Java ive inotungamira puratifomu yeKubernetes kuendesa uye serverless application kusimudzira, ichipa vanogadzira nzira yakabatana yekusimudzira mune ese ari maviri anoshanda uye akakosha masitaera.

Kana iwe ukatarisa izvi kupatsanurwa kwemafuremu, ipapo Quarkus iri pakati pe "Aggregators/Code Generators" uye "High-level fullstack frameworks". Izvi zvatopfuura aggregator, asi hazvitombosviki yakazara-stack, nekuti ... yakagadzirirwa kusimudzira kumashure.

Yakanyanya kumhanyisa yekumhanyisa application uye yakaderera ndangariro kushandiswa kwakavimbiswa. Heino data kubva pawebhusaiti yemugadziri:

Nguva kubva pakutanga kusvika yekutanga mhinduro (s):

Kugadziriswa
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Traditional Cloud Native Stack*
4.3
9.5

Memory kushandiswa (Mb):

Kugadziriswa
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Traditional Cloud Native Stack*
140
218

Zvinoshamisa, handizvo here?

*Ini handina kuwana chero ruzivo nezve iyi tekinoroji stack, tinogona kufunga kuti iyi ndeimwe mhando yeChitubu Boot ine imwe yekuwedzera muviri kit..

Mhoro Nyika!

Iyo yakapusa application yakanyorwa muQuarkus yaizotaridzika seizvi:

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String hello() {
       return "hello";
   }
}

Iri kirasi imwe chete uye zvakakwana! Iwe unogona kumhanya iyo application uchishandisa Maven mune yekuvandudza maitiro:

mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello

Musiyano kubva kune yakajairwa application ndeyekuti hapana kirasi yekushandisa! Quarkus inotsigira kupisa kurodha, saka unogona kushandura application yako usingaitengi, uchiita budiriro inokurumidza.

Chii chinotevera? Iwe unogona kuwedzera sevhisi kune controller uchishandisa annotation Jekiseni. Kodhi yebasa:

@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!

Ziva kuti Quarkus inoshandisa akajairwa zvirevo kubva kune akajairwa masisitimu - CDI uye JAX-RS. Iko hakuna chikonzero chekudzidza chero chinhu chitsva kana wakamboshanda neCDI neJAX-RS kare, hongu.

Kushanda ne database

Hibernate uye yakajairwa JPA zvirevo zvemasangano zvinoshandiswa. Sezvakaita REST controllers, unofanirwa kunyora hushoma hwekodhi. Zvakakwana kuratidza zvinotsamira mugungano faira, wedzera zvirevo @Entity uye gadzirisa datasource mukushandisa.properties.

Zvose. Hapana sessionFactory, persistence.xml kana mamwe mafaera esevhisi. Isu tinonyora chete kodhi inodiwa. Zvakadaro, kana zvichidikanwa, unogona kugadzira persistence.xml faira uye kugadzirisa ORM layer zvakanyanya.

Quarkus inotsigira caching yemasangano, kuunganidzwa kwehukama-kune-vakawanda, uye mibvunzo. Pakutanga kuona zvinotaridzika zvakanaka, asi ndizvo local caching, yeimwe Kubernetes node. Avo. Iwo ma cache emanode akasiyana haana kuwiriraniswa neimwe neimwe. Ndinovimba kuti izvi ndezvenguva pfupi.

Asynchronous code execution

Sezvambotaurwa pamusoro, Quarkus inotsigirawo reactive programming style. Iko kodhi yekushandiswa kwekare inogona kunyorwa mune imwe fomu.

@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 + "!";
       });
   }
}

Asynchronous kodhi inogona zvakare kuendeswa kune sevhisi, mhedzisiro ichave yakafanana.

Kuedza

Miedzo yeQuarkus application inogona kunyorwa muJUnit4 kana JUnit5. Pazasi pane bvunzo yekuyedza yekupedzisira, yakanyorwa uchishandisa RestAssured, asi imwe hurongwa inogona kushandiswa:

@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 + "!"));
   }
}

Iyo @QuarkusTest annotation inokuraira kuti umhanye application usati waita bvunzo. Imwe yasara kodhi inozivikanwa kune vese vanogadzira.

Platform-specific application

Sezvo Quarkus yakanyatsobatanidzwa neGraalVM, zvinogoneka kugadzira kodhi-yakatarwa kodhi. Kuti uite izvi, unofanirwa kuisa GraalVM uye tsanangura iyo GRAALVM_HOME nharaunda inosiyana. Uyezve nyoresa mbiri yegungano uye tsanangura iyo paunenge uchigadzira application:

mvn package -Pnative

Sezvineiwo, iyo yakagadzirwa application inogona kuyedzwa. Uye izvi zvakakosha nekuti kuitwa kwekodhi kodhi kunogona kusiyana nekuurayiwa paJVM. Iyo @SubstrateTest annotation inomhanya papuratifomu-chaiwo kodhi yekushandisa. Kushandisa zvakare bvunzo kodhi iripo inogona kuitwa uchishandisa nhaka; semhedzisiro, iyo kodhi yekuyedza-inotsamira papuratifomu application ichaita seizvi:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Mufananidzo wakagadzirwa unogona kuiswa muDocker uye unomhanya muKubernetes kana OpenShift, inotsanangurwa zvakadzama mukati mirayiridzo.

Zvishandiso

Iyo Quarkus framework inogona kushandiswa neMaven uye Gradle. Maven inotsigirwa zvizere, kusiyana neGradle. Nehurombo, parizvino Gradle haitsigire kugadzira purojekiti isina chinhu; kune ruzivo rwakadzama pane webhusaiti zvinyorwa.

Extensions

Quarkus chirongwa chinowedzera. Parizvino pane kurongeka 40 kuwedzera, iyo inowedzera kushanda kwakasiyana-siyana - kubva pakutsigirwa Spring DI mudziyo ΠΈ Apache Camel usati watema matanda uye nekuburitsa metrics ekushandisa masevhisi. Uye panotova nekuwedzera kwekutsigira zvinyorwa zvekunyora muKotlin, kuwedzera kuJava.

mhedziso

Sekuona kwangu, Quarkus inonyatso kuenderana nemaitiro enguva yacho. Backend kodhi kuvandudza kuri kuita nyore uye nyore, uye chimiro ichi chinowedzera kurerutsa uye nekumhanyisa kusimudzira sevhisi nekuwedzera rutsigiro rwemuno rweDocker uye Kubernetes. Iyo yakakura yekuwedzera ndeye yakavakirwa-mukati tsigiro yeGraalVM uye chizvarwa chepuratifomu-inotsamira mifananidzo, iyo inobvumira masevhisi kuti atange chaizvo nekukurumidza uye kutora diki ndangariro nzvimbo. Uye izvi zvakakosha munguva yedu yekushuvira kukuru kwemicroservices uye serverless architecture.

Nzvimbo yepamutemo - quarkus.io. Mienzaniso yemapurojekiti ekukurumidza kutanga atovepo pairi GitHub.

Source: www.habr.com

Voeg