Halo semuanya, ini postingan ketiga dari seri Quarkus!
Saat mengembangkan layanan mikro Java, sering kali diyakini demikian
Secara lebih rinci, pertama-tama kita akan melihat cakupan dan detail bagaimana Quarkus mendukung Spring API untuk menunjukkan kepada pengembang Spring cara menggunakan MicroProfile API dalam pekerjaan mereka sehari-hari. Kemudian kita akan membahas MicroProfile API, yang berguna bagi pengembang Spring saat membuat layanan mikro.
Mengapa Quarku? Pertama, ini adalah pengkodean langsung, yaitu memuat ulang secara otomatis setiap perubahan di API MicroProfile, API Spring, dan API Java lainnya, yang dilakukan hanya dengan satu perintah: mvn quarkus:dev. Kedua, dibahas dalam
Kami tidak akan membahas secara detail tentang MicroProfile, selain untuk membantu pengembang Spring memahami bagaimana mereka dapat menggunakan Spring API dengan MicroProfile API di Quarkus.
Kontainer dan Kubernet
Untuk menyederhanakan artikel ini, kami hanya akan membahas aspek dukungan tingkat tinggi di sini.
Quarku juga
Terakhir, dengan berfokus pada Kubernetes sebagai lingkungan penerapan target, Quarkus tidak menggunakan kerangka kerja Java jika fungsi serupa diterapkan di tingkat platform Kubernetes itu sendiri. Tabel 1 memberikan peta korespondensi fungsional antara Kubernetes dan kerangka kerja Java pada umumnya yang digunakan oleh pengembang Spring.
Tabel 1. Peta korespondensi fungsional antara framework Java dan Kubernetes.
Fungsional
Sepatu Musim Semi Tradisional
Kubernetes
Penemuan layanan
Telah kudapat
DNS
konfigurasi
Konfigurasi Cloud Musim Semi
Konfigurasi Peta/Rahasia
Penyeimbang beban
Pita (sisi klien)
Layanan, Pengontrol Replikasi (sisi server)
Mengompilasi dan menjalankan kode dari contoh
Dalam artikel ini kami mengacu pada
API Kerangka Musim Semi
Injeksi Ketergantungan
Quarkus mendukung berbagai
Π
Tabel 2. Contoh penggunaan API Spring DI yang didukung.
Fitur Spring DI yang Didukung
contoh
Injeksi Konstruktor
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Injeksi Lapangan
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Konfigurasi
@Configuration
public class AppConfiguration {
@Bean(name = "capitalizeFunction")
public StringFunction capitalizer() {
return String::toUpperCase;
}
}
@Component("noopFunction")
public class NoOpSingleStringFunction implements StringFunction {
@Override
public String apply(String s) {
return s;
}
}
@Service
public class MessageProducer {
@Value("${greeting.message}")
String message;
public String getPrefix() {
return message;
}
}
Kerangka web
Pengguna MicroProfile akan menyukai Quarkus yang mendukung JAX-RS, MicroProfile Rest Client, JSON-P, dan JSON-B sebagai model pemrograman web utama. Pengembang Spring akan senang dengan dukungan terbaru Quarkus untuk Spring Web API, khususnya antarmuka REST. Mirip dengan Spring DI, tujuan utama dukungan Spring Web API adalah untuk memungkinkan pengembang Spring menggunakan Spring Web API bersama dengan MicroProfile API. Contoh cara menggunakan Spring Web API yang didukung disediakan di Tabel 3, dan informasi lebih lanjut serta contoh mengenai topik ini dapat ditemukan di tutorial Quarkus yang disebut
Tabel 3. Contoh penggunaan Spring Web API yang didukung.
Fitur Web Musim Semi yang Didukung
contoh
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@Variabel Jalur
@Nilai Kue
@RequestBody
@ResponStatus
@ExceptionHandler
@RestControllerAdvice (sebagian)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Data Musim Semi JPA
Pengguna MicroProfile juga akan menghargai bahwa Quarkus mendukung JPA menggunakan Hibernate ORM. Ada juga kabar baik bagi pengembang Spring: Quarkus mendukung anotasi dan tipe umum Spring Data JPA. Contoh penggunaan API JPA Spring Data yang didukung diberikan pada Tabel 4.
Π
Tabel 4. Contoh penggunaan Spring Data JPA API yang didukung.
Fitur JPA Data Musim Semi yang Didukung
contoh
Repositori Mentah
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Gudang
Repositori Jpa
PagingAndSortingRepositori
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Fragmen Repositori
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Metode kueri turunan
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Kueri yang ditentukan pengguna
public interface MovieRepository
extends CrudRepository {
Movie findFirstByOrderByDurationDesc();
@Query("select m from Movie m where m.rating = ?1")
Iterator findByRating(String rating);
@Query("from Movie where title = ?1")
Movie findByTitle(String title);
}
API Profil Mikro
Toleransi kesalahan
Konstruksi toleransi kesalahan sangat penting untuk mencegah kegagalan berjenjang dan menciptakan arsitektur layanan mikro yang andal. Pengembang pegas telah menggunakan pemutus sirkuit untuk toleransi kesalahan selama bertahun-tahun.
Tabel 5. Contoh penggunaan MicroProfile Fault Tolerance API yang didukung.
Fitur Toleransi Kesalahan MicroProfile
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
contoh
@Asynchronous
Menjalankan logika di thread terpisah
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Sekat
Batasi jumlah permintaan simultan
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@Pemutus arus
Penanganan kegagalan yang cerdas dan pemulihan dari kegagalan
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Kembali
Memanggil logika alternatif jika terjadi kegagalan
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Coba lagi jika permintaan gagal
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Batas waktu pengendalian kegagalan
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Pengecekan layanan (Layanan Kesehatan)
Platform Kubernetes memantau kesehatan container menggunakan layanan khusus. Untuk memungkinkan platform dasar memantau layanan, pengembang Spring biasanya menggunakan HealthIndicator kustom dan Spring Boot Actuator. Di Quarkus, hal ini dapat dilakukan menggunakan MicroProfile Health, yang secara default melakukan pemeriksaan keaktifan, namun dapat dikonfigurasi untuk memeriksa keaktifan dan kesiapan secara bersamaan. Contoh cara menggunakan MicroProfile Health API yang didukung disediakan di Tabel 6, dan informasi tambahan disediakan di manual Quarkus
Tabel 6: Contoh penggunaan MicroProfile Health API yang didukung.
Fitur Kesehatan MicroProfile
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
contoh
@Kehidupan
Platform me-reboot aplikasi-aplikasi dalam container yang gagal
Titik akhir:
tuan rumah:8080/kesehatan/hidup
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Kesiapan
Platform tidak akan mengirimkan lalu lintas ke aplikasi dalam container jika belum siap
Titik akhir:
host:8080/kesehatan/siap
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Metrik
Aplikasi menyediakan metrik untuk tujuan operasional (untuk memantau kinerja SLA) atau tujuan non-operasional (SLA bisnis). Pengembang pegas menyediakan metrik menggunakan Spring Boot Actuator dan Micrometer. Pada gilirannya, Quarkus menggunakan Metrik MicroProfile untuk menyediakan metrik dasar (JVM dan sistem operasi), metrik vendor (Quarkus), dan metrik aplikasi. Metrik MicroProfile mengharuskan penerapannya mendukung format keluaran JSON dan OpenMetrics (Prometheus). Contoh penggunaan MicroProfile Metrics API diberikan pada Tabel 7.
Π
Tabel 7. Contoh penggunaan MicroProfile Metrics API.
Fitur Metrik MicroProfile
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
contoh
@Terhitung
Menunjukkan counter counter yang menghitung berapa kali objek beranotasi dipanggil
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Menunjukkan ukuran yang menghitung jumlah panggilan bersamaan ke objek beranotasi
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Mengukur
Menunjukkan sensor pengukur yang mengukur nilai objek beranotasi
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Diukur
Menunjukkan sensor meteran yang memonitor frekuensi panggilan objek beranotasi
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Anotasi yang berisi informasi tentang metadata ketika permintaan diterima untuk memasukkan atau menghasilkan metrik
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Menunjukkan pengatur waktu yang melacak durasi objek yang dianotasi
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Titik Akhir Metrik
Metrik aplikasi
Metrik dasar
Metrik vendor
Semua metrik
Klien Istirahat MicroProfile
Layanan mikro sering kali menyediakan titik akhir RESTful yang memerlukan API klien yang sesuai untuk digunakan. Untuk menggunakan titik akhir RESTful, pengembang Spring biasanya menggunakan RestTemplate. Quarkus menawarkan MicroProfile Rest Client API untuk mengatasi masalah ini, contoh penggunaannya diberikan pada Tabel 8.
Π
Tabel 8. Contoh penggunaan MicroProfile Rest Client API.
Fitur Klien Istirahat MicroProfile
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
contoh
@DaftarRestClient
Mendaftarkan antarmuka Java yang diketik sebagai klien REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Menandai implementasi sebuah instance dari antarmuka klien REST yang diketik
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Doa
Memanggil titik akhir REST
System.out.println(
restClient.getSalutation());
mp-rest/url
Menentukan titik akhir REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Hasil
Di blog ini, yang ditujukan terutama untuk pengembang Spring, kami melihat sekilas cara menggunakan Spring API dengan MicroProfile API di Quarkus untuk mengembangkan layanan mikro Java dan kemudian mengkompilasinya menjadi kode biner asli yang menghemat ratusan megabyte RAM dan diluncurkan di hitungan milidetik.
Seperti yang sudah Anda pahami, informasi lebih lanjut tentang dukungan untuk Spring dan MicroProfile API, serta banyak informasi berguna lainnya, dapat ditemukan di
Sumber: www.habr.com