Hello semua, inilah siaran ketiga dalam siri Quarkus!
Apabila membangunkan perkhidmatan mikro Java, ia sering dipercayai bahawa
Dengan lebih terperinci, kami akan melihat skop dan butiran tentang cara Quarkus menyokong Spring API untuk menunjukkan kepada pembangun Spring cara menggunakan MicroProfile API dalam kerja seharian mereka. Kemudian kami akan merangkumi API MicroProfile, yang berguna untuk pembangun Spring apabila membuat perkhidmatan mikro.
Kenapa Quarkus? Pertama, ini ialah pengekodan langsung, iaitu, muat semula automatik sebarang perubahan dalam API MicroProfile, Spring API dan API Java lain, yang dilakukan dengan hanya satu arahan: mvn quarkus:dev. Kedua, dipertimbangkan dalam
Kami tidak akan menerangkan secara terperinci tentang MicroProfile, selain untuk membantu pembangun Spring memahami cara mereka boleh menggunakan Spring API dengan MicroProfile API dalam Quarkus.
Bekas dan Kubernetes
Untuk memastikan artikel ini mudah, kami hanya akan membincangkan aspek sokongan peringkat tinggi di sini.
Quarkus juga
Akhir sekali, dengan memfokuskan pada Kubernetes sebagai persekitaran penggunaan sasaran, Quarkus tidak menggunakan rangka kerja Java dalam kes di mana fungsi serupa dilaksanakan pada tahap platform Kubernetes itu sendiri. Jadual 1 menyediakan peta korespondensi berfungsi antara Kubernetes dan rangka kerja Java biasa yang digunakan oleh pembangun Spring.
Jadual 1. Peta korespondensi fungsian antara rangka kerja Java dan Kubernetes.
Fungsian
Kasut Musim Bunga Tradisional
Kubernetes
Penemuan perkhidmatan
Eureka
DNS
konfigurasi
Konfigurasi Awan Musim Bunga
Peta Konfig/Rahsia
Pengimbangan beban
Reben (sebelah pelanggan)
Perkhidmatan, Pengawal Replikasi (sebelah pelayan)
Menyusun dan menjalankan kod daripada contoh
Dalam artikel ini kita merujuk kepada
API Rangka Kerja Spring
Suntikan Ketergantungan
Quarkus menyokong pelbagai
Π
Jadual 2. Contoh penggunaan Spring DI API yang disokong.
Ciri Spring DI yang Disokong
contoh
Suntikan Pembina
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Suntikan Medan
@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;
}
}
Rangka kerja web
Pengguna MicroProfile pasti suka bahawa Quarkus menyokong JAX-RS, MicroProfile Rest Client, JSON-P dan JSON-B sebagai model pengaturcaraan web utama. Pembangun Spring akan gembira dengan sokongan Quarkus baru-baru ini untuk API Web Spring, khususnya antara muka REST. Sama seperti Spring DI, matlamat utama sokongan Spring Web API adalah untuk membolehkan pembangun Spring menggunakan Spring Web API bersama-sama dengan MicroProfile API. Contoh cara menggunakan API Web Spring yang disokong disediakan dalam Jadual 3, dan lebih banyak maklumat serta contoh tentang topik ini boleh didapati dalam tutorial Quarkus yang dipanggil
Jadual 3. Contoh penggunaan Spring Web API yang disokong.
Ciri Web Spring yang Disokong
contoh
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (sebahagian)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
JPA Spring Data
Pengguna MicroProfile juga akan menghargai bahawa Quarkus menyokong JPA menggunakan ORM Hibernate. Terdapat juga berita baik untuk pembangun Spring: Quarkus menyokong anotasi dan jenis JPA Data Spring biasa. Contoh penggunaan Spring Data JPA API yang disokong diberikan dalam Jadual 4.
Π
Jadual 4. Contoh menggunakan API JPA Data Spring yang disokong.
Ciri JPA Spring Data Disokong
contoh
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Repositori
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Serpihan Repositori
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Kaedah pertanyaan terbitan
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Pertanyaan 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 MicroProfile
Toleransi kesalahan
Pembinaan toleransi kesalahan adalah sangat penting untuk mencegah kegagalan melata dan mencipta seni bina perkhidmatan mikro yang boleh dipercayai. Pemaju spring telah menggunakan pemutus litar untuk toleransi kesalahan selama bertahun-tahun.
Jadual 5. Contoh penggunaan API Toleransi Kesalahan MicroProfile yang disokong.
Ciri Toleransi Kesalahan MicroProfile
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
contoh
@Asynchronous
Melaksanakan logik dalam benang berasingan
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Kepala pukal
Hadkan bilangan permintaan serentak
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@Pemutus litar
Pengendalian kegagalan pintar dan pemulihan daripada kegagalan
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Fallback
Memanggil logik alternatif sekiranya berlaku kegagalan
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Cuba semula apabila permintaan gagal
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Tamat masa kawalan kegagalan
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Perkhidmatan pemeriksaan (Kesihatan Perkhidmatan)
Platform Kubernetes memantau kesihatan kontena menggunakan perkhidmatan khas. Untuk membenarkan platform asas memantau perkhidmatan, pembangun Spring biasanya menggunakan HealthIndicator tersuai dan Spring Boot Actuator. Di Quarkus, ini boleh dilakukan menggunakan MicroProfile Health, yang secara lalai melakukan pemeriksaan keaktifan, tetapi boleh dikonfigurasikan untuk memeriksa kesediaan dan kesediaan secara serentak. Contoh cara menggunakan API Kesihatan MicroProfile yang disokong disediakan dalam Jadual 6 dan maklumat tambahan disediakan dalam manual Quarkus
Jadual 6: Contoh penggunaan API Kesihatan MicroProfile yang disokong.
Ciri Kesihatan MicroProfile
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
contoh
@Kehidupan
But semula platform gagal untuk aplikasi kontena
Titik Akhir:
hos: 8080/kesihatan/hidup
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Kesediaan
Platform tidak akan menghantar trafik ke aplikasi kontena jika ia tidak sedia
Titik Akhir:
hos:8080/kesihatan/sedia
@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 sama ada untuk tujuan operasi (untuk memantau SLA prestasi) atau tujuan bukan operasi (SLA perniagaan). Pembangun Spring menyediakan metrik menggunakan Spring Boot Actuator dan Micrometer. Seterusnya, Quarkus menggunakan MicroProfile Metrics untuk menyediakan metrik garis dasar (JVM dan sistem pengendalian), metrik vendor (Quarkus) dan metrik aplikasi. MicroProfile Metrics memerlukan pelaksanaan menyokong format output JSON dan OpenMetrics (Prometheus). Contoh penggunaan MicroProfile Metrics API diberikan dalam Jadual 7.
Π
Jadual 7. Contoh penggunaan API MicroProfile Metrics.
Ciri Metrik MicroProfile
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
contoh
@Dikira
Menandakan pembilang pembilang yang mengira bilangan kali objek beranotasi telah dipanggil
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Menandakan tolok yang mengira bilangan panggilan serentak ke objek beranotasi
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Tolok
Menandakan penderia tolok yang mengukur nilai objek beranotasi
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Bermeter
Menandakan penderia meter yang memantau kekerapan panggilan objek beranotasi
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Anotasi yang mengandungi maklumat tentang metadata apabila permintaan diterima untuk memasukkan atau menghasilkan metrik
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Menunjukkan pemasa yang menjejaki tempoh objek beranotasi
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Titik Tamat Metrik
Metrik aplikasi
Metrik asas
Metrik vendor
Semua metrik
Pelanggan Rehat MicroProfile
Perkhidmatan mikro selalunya menyediakan titik akhir RESTful yang memerlukan API pelanggan yang sepadan untuk berfungsi. Untuk menggunakan titik akhir RESTful, pembangun Spring biasanya menggunakan RestTemplate. Quarkus menawarkan MicroProfile Rest Client API untuk menyelesaikan masalah ini, contoh penggunaannya diberikan dalam Jadual 8.
Π
Jadual 8. Contoh penggunaan MicroProfile Rest Client API.
Ciri Pelanggan Rehat MicroProfile
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
contoh
@RegisterRestClient
Mendaftarkan antara muka Java yang ditaip sebagai klien REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Menandai pelaksanaan contoh antara muka klien REST yang ditaip
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Penyerahan
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
Keputusan
Dalam blog ini, yang ditujukan terutamanya kepada pembangun Spring, kami melihat dengan pantas cara menggunakan API Spring dengan MicroProfile API dalam Quarkus untuk membangunkan perkhidmatan mikro Java dan kemudian menyusunnya menjadi kod binari asli yang menjimatkan ratusan megabait RAM dan dilancarkan dalam hitungan milisaat.
Seperti yang telah anda fahami, maklumat lanjut tentang sokongan untuk API Spring dan MicroProfile, serta banyak maklumat berguna lain, boleh didapati dalam
Sumber: www.habr.com