Quarkus iku sawijining subatom Jawa supersonik. Ringkesan Brief saka framework

Quarkus iku sawijining subatom Jawa supersonik. Ringkesan Brief saka framework

Pambuka

Tanggal XNUMX Maret, RedHat (enggal IBM) diwenehi kerangka anyar - quarkus. Miturut pangembang, kerangka iki adhedhasar GraalVM lan OpenJDK HotSpot lan dirancang kanggo Kubernetes. Tumpukan Quarkus kalebu: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus lan liya-liyane.

Tujuane kanggo nggawe Java minangka platform utama kanggo penyebaran Kubernetes lan pangembangan aplikasi tanpa server, nyedhiyakake pangembang kanthi pendekatan terpadu kanggo pangembangan ing gaya reaktif lan imperatif.

Yen sampeyan ndeleng iki klasifikasi frameworks, banjur Quarkus nang endi wae antarane "Aggregators / Code Generators "lan" High-tingkat fullstack frameworks ". Iki wis luwih saka aggregator, nanging malah ora tekan full-stack, amarga ... dirancang kanggo pangembangan backend.

Kacepetan aplikasi sing dhuwur banget lan konsumsi memori sing sithik dijanjekake. Mangkene data saka situs web pangembang:

Wektu saka wiwitan nganti tanggapan pisanan (s):

Konfigurasi
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Tumpukan Asli Awan Tradisional*
4.3
9.5

Konsumsi memori (Mb):

Konfigurasi
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Tumpukan Asli Awan Tradisional*
140
218

Nyengsemaken, ta?

*Aku ora nemokake informasi babagan tumpukan teknologi iki, kita bisa nganggep manawa iki minangka Spring Boot kanthi kit awak tambahan..

Hello World!

Aplikasi paling gampang sing ditulis ing Quarkus bakal katon kaya iki:

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

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

Iku secara harfiah siji kelas lan iku cukup! Sampeyan bisa mbukak aplikasi nggunakake Maven ing mode pangembangan:

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

Bedane saka aplikasi biasa yaiku ora ana kelas Aplikasi! Quarkus ndhukung reload panas, supaya sampeyan bisa ngganti aplikasi tanpa miwiti maneh, nggawe pembangunan luwih cepet.

Apa sabanjure? Sampeyan bisa nambah layanan menyang controller nggunakake anotasi Nyuntik. Kode layanan:

@ApplicationScoped
public class GreetingService {

   public String greeting(String name) {
       return "Hello " + name + "!";
   }
}

pengontrol:

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

Elinga yen Quarkus nggunakake anotasi standar saka kerangka kerja sing akrab - CDI lan JAX-RS. Ora perlu sinau sing anyar yen sampeyan wis kerja karo CDI lan JAX-RS sadurunge, mesthi.

Nggarap database

Hibernate lan anotasi JPA standar kanggo entitas digunakake. Kaya pengontrol REST, sampeyan kudu nulis kode minimal. Cukup kanggo nunjukake dependensi ing file perakitan, nambah anotasi @Entity lan ngatur sumber data ing application.properties.

Kabeh. Ora ana sessionFactory, persistence.xml utawa file layanan liyane. Kita nulis mung kode sing dibutuhake. Nanging, yen perlu, sampeyan bisa nggawe file persistence.xml lan ngatur lapisan ORM luwih apik.

Quarkus ndhukung caching entitas, koleksi kanggo hubungan siji-kanggo-akeh, lan pitakon. Ing kawitan marketing katon apik, nanging iku lokal caching, kanggo siji simpul Kubernetes. Sing. Cache saka macem-macem simpul ora disinkronake karo saben liyane. Mugi iki sak wentoro.

Eksekusi kode asinkron

Kaya kasebut ing ndhuwur, Quarkus uga ndhukung gaya pemrograman reaktif. Kode aplikasi sadurunge bisa ditulis ing wangun sing beda.

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

Kode asinkron uga bisa ditransfer menyang layanan, asil bakal padha.

Tes

Tes kanggo aplikasi Quarkus bisa ditulis ing JUnit4 utawa JUnit5. Ing ngisor iki minangka conto tes kanggo titik pungkasan, ditulis nggunakake RestAssured, nanging kerangka liya bisa digunakake:

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

Anotasi @QuarkusTest menehi pitunjuk kanggo mbukak aplikasi sadurunge nglakokake tes. Liyane iku kode akrab kanggo kabeh pangembang.

Aplikasi khusus platform

Wiwit Quarkus wis Integrasi tightly karo GraalVM, iku mesthi bisa kanggo generate kode platform-tartamtu. Kanggo nindakake iki, sampeyan kudu nginstal GraalVM lan nemtokake variabel lingkungan GRAALVM_HOME. Salajengipun ndhaftar profil kanggo DΓ©wan lan nemtokake nalika mbangun aplikasi:

mvn package -Pnative

Apike, aplikasi sing digawe bisa diuji. Lan iki penting amarga eksekusi kode asli bisa beda karo eksekusi ing JVM. Anotasi @SubstrateTest nganggo kode aplikasi khusus platform. Nggunakake maneh kode tes sing ana bisa ditindakake nggunakake warisan; minangka asil, kode kanggo nguji aplikasi sing gumantung ing platform bakal katon kaya iki:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Gambar sing digawe bisa dikemas ing Docker lan mbukak ing Kubernetes utawa OpenShift, diterangake kanthi rinci ing instruksi.

Piranti

Framework Quarkus bisa digunakake karo Maven lan Gradle. Maven didhukung kanthi lengkap, ora kaya Gradle. Sayange, saiki Gradle ora ndhukung nggawe proyek kosong; ana informasi rinci ing situs web buku teks.

Ekstensi

Quarkus minangka kerangka kerja sing bisa diperpanjang. Saiki ana pesenan 40 ekstensi, sing nambah macem-macem fungsi - saka dhukungan Spring DI wadhah ΠΈ Apache Camel sadurunge logging lan nerbitake metrik kanggo layanan sing mlaku. Lan wis ana ekstensi kanggo ndhukung aplikasi nulis ing Kotlin, saliyane Jawa.

kesimpulan

Miturut pendapatku, Quarkus cukup cocog karo tren jaman saiki. Pangembangan kode backend dadi luwih gampang lan luwih gampang, lan kerangka kerja iki luwih gampang lan nyepetake pangembangan layanan kanthi nambah dhukungan asli kanggo Docker lan Kubernetes. A plus ageng punika dibangun ing support kanggo GraalVM lan generasi saka gambar gumantung platform, sing ngidini layanan kanggo miwiti tenan cepet lan njupuk munggah sethitik papan memori. Lan iki penting banget ing wektu semangat massa kanggo layanan mikro lan arsitektur tanpa server.

Situs resmi - quarkus.io. Conto proyek kanggo wiwitan cepet wis kasedhiya ing GitHub.

Source: www.habr.com

Add a comment