pengenalan
Pada tanggal XNUMX Maret, RedHat (segera IBM)
Tujuannya adalah menjadikan Java sebagai platform terdepan untuk penerapan Kubernetes dan pengembangan aplikasi tanpa server, memberikan pengembang pendekatan terpadu terhadap pengembangan dalam gaya reaktif dan imperatif.
Jika Anda melihat
Kecepatan peluncuran aplikasi yang sangat tinggi dan konsumsi memori yang rendah dijanjikan. Berikut data dari situs pengembang:
Waktu dari awal hingga respons pertama:
Konfigurasi
ISTIRAHAT
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Tumpukan Asli Cloud Tradisional*
4.3
9.5
Konsumsi memori (Mb):
Konfigurasi
ISTIRAHAT
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Tumpukan Asli Cloud Tradisional*
140
218
Mengesankan, bukan?
*Saya tidak menemukan informasi apa pun tentang tumpukan teknologi ini, kami dapat berasumsi bahwa ini adalah semacam Spring Boot dengan body kit tambahan.
Halo Dunia!
Aplikasi paling sederhana yang ditulis dalam Quarkus akan terlihat seperti ini:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
Ini benar-benar satu kelas dan itu sudah cukup! Anda dapat menjalankan aplikasi menggunakan Maven dalam mode pengembangan:
mvn compile quarkus:dev
β¦
$ curl http://localhost:8080/hello
hello
Bedanya dengan aplikasi biasa adalah tidak ada kelas Aplikasi! Quarkus mendukung hot reload, sehingga Anda dapat mengubah aplikasi tanpa memulai ulang, sehingga pengembangan menjadi lebih cepat.
Apa berikutnya? Anda dapat menambahkan layanan ke pengontrol menggunakan anotasi
@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!
Perhatikan bahwa Quarkus menggunakan anotasi standar dari kerangka kerja yang sudah dikenal - CDI dan JAX-RS. Tentu saja, Anda tidak perlu mempelajari sesuatu yang baru jika Anda pernah bekerja dengan CDI dan JAX-RS sebelumnya.
Bekerja dengan basis data
Anotasi hibernasi dan JPA standar untuk entitas digunakan. Seperti halnya pengontrol REST, Anda perlu menulis kode minimum. Cukup dengan menunjukkan dependensi dalam file perakitan, tambahkan anotasi @Entity
dan konfigurasikan sumber data di application.properties.
Semua. Tidak ada sessionFactory, persistence.xml, atau file layanan lainnya. Kami hanya menulis kode yang diperlukan. Namun, jika perlu, Anda dapat membuat file persistence.xml dan mengkonfigurasi lapisan ORM dengan lebih baik.
Quarkus mendukung caching entitas, koleksi untuk hubungan satu-ke-banyak, dan kueri. Sekilas terlihat bagus, tapi memang begitu lokal caching, untuk satu node Kubernetes. Itu. Cache dari node yang berbeda tidak disinkronkan satu sama lain. Saya harap ini hanya sementara.
Eksekusi kode asinkron
Seperti disebutkan di atas, Quarkus juga mendukung gaya pemrograman reaktif. Kode aplikasi sebelumnya dapat ditulis dalam bentuk yang berbeda.
@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 juga dapat ditransfer ke layanan, hasilnya akan sama.
Pengujian
Pengujian untuk aplikasi Quarkus dapat ditulis dalam JUnit4 atau JUnit5. Di bawah ini adalah contoh pengujian untuk titik akhir, ditulis menggunakan RestAssured, tetapi kerangka kerja lain dapat digunakan:
@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 memerintahkan Anda untuk menjalankan aplikasi sebelum menjalankan pengujian. Sisanya adalah kode yang familier bagi semua pengembang.
Aplikasi khusus platform
Karena Quarkus terintegrasi erat dengan GraalVM, tentu saja dimungkinkan untuk menghasilkan kode khusus platform. Untuk melakukannya, Anda perlu menginstal GraalVM dan menentukan variabel lingkungan GRAALVM_HOME. Lebih jauh
mvn package -Pnative
Menariknya, aplikasi yang dihasilkan bisa diuji. Dan ini penting karena eksekusi kode asli mungkin berbeda dengan eksekusi di JVM. Anotasi @SubstrateTest menjalankan kode aplikasi khusus platform. Penggunaan kembali kode pengujian yang ada dapat dilakukan dengan menggunakan warisan; sebagai hasilnya, kode untuk menguji aplikasi yang bergantung pada platform akan terlihat seperti ini:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
Gambar yang dihasilkan dapat dikemas dalam Docker dan dijalankan di Kubernetes atau OpenShift, dijelaskan secara rinci di
Toolkit
Kerangka kerja Quarkus dapat digunakan dengan Maven dan Gradle. Maven didukung penuh, tidak seperti Gradle. Sayangnya, saat ini Gradle tidak mendukung pembuatan proyek kosong; terdapat informasi rinci di situs web
Ekstensi
Quarkus adalah kerangka kerja yang dapat diperluas. Saat ini sedang ada pesanan
Kesimpulan
Menurut saya, Quarkus cukup sejalan dengan tren zaman. Pengembangan kode backend menjadi semakin mudah, dan kerangka kerja ini semakin menyederhanakan dan mempercepat pengembangan layanan dengan menambahkan dukungan asli untuk Docker dan Kubernetes. Nilai tambah yang besar adalah dukungan bawaan untuk GraalVM dan pembuatan gambar yang bergantung pada platform, yang memungkinkan layanan dimulai dengan sangat cepat dan hanya menggunakan sedikit ruang memori. Dan ini sangat penting di zaman kita yang sangat menyukai layanan mikro dan arsitektur tanpa server.
Situs resmi -
Sumber: www.habr.com