Halo kabeh, iki kiriman katelu ing seri Quarkus!
Nalika ngembangake layanan mikro Jawa, asring dipercaya
Kanthi luwih rinci, kita bakal ndeleng ruang lingkup lan rincian babagan carane Quarkus ndhukung Spring API kanggo nuduhake pangembang Spring carane nggunakake MicroProfile API ing karya saben dinane. Banjur kita bakal nutupi API MicroProfile, sing migunani kanggo pangembang Spring nalika nggawe layanan mikro.
Kenapa Quarkus? Kaping pisanan, iki coding langsung, yaiku, ngisi ulang otomatis saka owah-owahan ing MicroProfile API, Spring API lan API Java liyane, sing ditindakake kanthi mung siji prentah: mvn quarkus:dev. Kapindho, dibahas ing
Kita ora bakal njlèntrèhaké rinci babagan MicroProfile, kajaba kanggo mbantu pangembang Spring ngerti carane bisa nggunakake Spring API karo MicroProfile API ing Quarkus.
Wadhah lan Kubernetes
Supaya artikel iki tetep prasaja, kita mung bakal nutupi aspek dhukungan tingkat dhuwur ing kene.
Quarkus uga
Pungkasan, kanthi fokus ing Kubernetes minangka lingkungan panyebaran target, Quarkus ora nggunakake kerangka Java ing kasus nalika fungsi sing padha ditindakake ing tingkat platform Kubernetes dhewe. Tabel 1 nyedhiyakake peta korespondensi fungsional antarane Kubernetes lan kerangka Java khas sing digunakake dening pangembang Spring.
Tabel 1. Peta korespondensi fungsional antarane kerangka Jawa lan Kubernetes.
Fungsi
Boot Spring Tradisional
Kubernetes
Panemuan layanan
Eureka
DNS
konfigurasi
Spring Cloud Config
Konfigurasi Peta / Rahasia
Ngimbangi pengimbang
Pita (sisi klien)
Service, Replication Controller (sisih server)
Nglumpukake lan mbukak kode saka conto
Ing artikel iki kita deleng
Spring Framework API
Injeksi ketergantungan
Quarkus ndhukung sawetara
Π
Tabel 2. Conto nggunakake Spring DI API didhukung.
Didhukung Spring DI Fitur
conto
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
Pangguna MicroProfile bakal seneng yen Quarkus ndhukung JAX-RS, MicroProfile Rest Client, JSON-P, lan JSON-B minangka model pemrograman web utama. Pangembang musim semi bakal seneng karo dhukungan Quarkus anyar kanggo Spring Web API, utamane antarmuka REST. Kaya Spring DI, tujuan utama dhukungan Spring Web API yaiku supaya pangembang Spring bisa nggunakake Spring Web API bebarengan karo MicroProfile API. Conto carane nggunakake Spring Web API sing didhukung kasedhiya ing Tabel 3, lan informasi lan conto liyane babagan topik iki bisa ditemokake ing tutorial Quarkus sing diarani
Tabel 3. Conto nggunakake Spring Web API didhukung.
Didhukung Spring Web Fitur
conto
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (sebagean)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Spring DataJPA
Pangguna MicroProfile uga bakal ngormati manawa Quarkus ndhukung JPA nggunakake ORM Hibernate. Ana uga kabar apik kanggo pangembang Spring: Quarkus ndhukung anotasi lan jinis JPA Spring Data umum. Conto nggunakake Spring Data JPA API sing didhukung diwenehi ing Tabel 4.
Π
Tabel 4. Conto nggunakake didhukung Spring Data JPA API.
Fitur Spring Data JPA sing Didhukung
conto
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Repository
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Fragmen Repositori
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Metode pitakon sing diturunake
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Pitakonan sing ditemtokake pangguna
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);
}
MicroProfile API
Toleransi kesalahan
Konstruksi toleransi kesalahan penting banget kanggo nyegah kegagalan runtun lan nggawe arsitektur layanan mikro sing dipercaya. Pangembang musim semi wis nggunakake pemutus sirkuit kanggo toleransi kesalahan sajrone pirang-pirang taun.
Tabel 5. Conto nggunakake didhukung MicroProfile Fault Tolerance API.
Fitur Toleransi Fault MicroProfile
Description
conto
@Asynchronous
Eksekusi logika ing thread kapisah
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Matesi jumlah panjalukan bebarengan
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Penanganan kegagalan cerdas lan pulih saka kegagalan
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Mundur
Nelpon logika alternatif yen gagal
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Coba maneh yen panjaluk gagal
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Wektu kontrol gagal
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Pelayanan Pemeriksaan (Service Health)
Platform Kubernetes ngawasi kesehatan kontaner nggunakake layanan khusus. Kanggo ngidini platform dhasar kanggo ngawasi layanan, pangembang Spring biasane nggunakake HealthIndicator khusus lan Spring Boot Actuator. Ing Quarkus, iki bisa ditindakake kanthi nggunakake MicroProfile Health, sing kanthi standar nindakake mriksa liveness, nanging bisa dikonfigurasi kanggo mriksa liveness lan kesiapan bebarengan. Conto carane nggunakake MicroProfile Health API sing didhukung kasedhiya ing Tabel 6, lan informasi tambahan kasedhiya ing manual Quarkus
Tabel 6: Conto panggunaan API Kesehatan MicroProfile sing didhukung.
Fitur Kesehatan MicroProfile
Description
conto
@urip
Platform reboots gagal aplikasi containerized
Titik pungkasan:
inang: 8080 / kesehatan / urip
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Siaga
Platform kasebut ora bakal ngirim lalu lintas menyang aplikasi kontainer yen durung siyap
Titik pungkasan:
inang: 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 nyedhiyakake metrik kanggo tujuan operasional (kanggo ngawasi kinerja SLA) utawa tujuan non-operasional (SLA bisnis). Pangembang musim semi nyedhiyakake metrik nggunakake Spring Boot Actuator lan Micrometer. Sabanjure, Quarkus nggunakake MicroProfile Metrics kanggo nyedhiyakake metrik baseline (JVM lan sistem operasi), metrik vendor (Quarkus), lan metrik aplikasi. MicroProfile Metrics mbutuhake implementasine ndhukung format output JSON lan OpenMetrics (Prometheus). Conto nggunakake MicroProfile Metrics API diwenehi ing Tabel 7.
Π
Tabel 7. Conto nggunakake MicroProfile Metrics API.
Fitur Metrik MicroProfile
Description
conto
@Dietung
Nduduhake counter counter sing ngitung kaping pirang-pirang obyek sing dianotasi diarani
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Nduduhake ukuran sing ngitung jumlah panggilan bebarengan menyang obyek sing dianotasi
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gauge
Nduduhake sensor gauge sing ngukur nilai obyek sing dianotasi
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Meter
Nduduhake sensor meter sing ngawasi frekuensi telpon saka obyek anotasi
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Anotasi sing ngemot informasi babagan metadata nalika panjalukan ditampa kanggo ngetik utawa ngasilake metrik
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Nuduhake wektu sing nglacak durasi obyek sing dianotasi
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Metrik Endpoints
Metrik aplikasi
Metrik dhasar
Metrik vendor
Kabeh metrik
Klien Ngaso MicroProfile
Microservices asring nyedhiyakake titik pungkasan RESTful sing mbutuhake API klien sing cocog kanggo digarap. Kanggo nggunakake titik pungkasan RESTful, pangembang Spring biasane nggunakake RestTemplate. Quarkus nawakake MicroProfile Rest Client API kanggo ngatasi masalah iki, conto panggunaan sing diwenehake ing Tabel 8.
Π
Tabel 8. Conto nggunakake MicroProfile Rest Client API.
Fitur Klien Istirahat MicroProfile
Description
conto
@RegisterRestClient
Ndhaptar antarmuka Java sing diketik minangka klien REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Nandhani implementasine conto antarmuka klien REST sing diketik
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Panjaluk
Nelpon titik pungkasan REST
System.out.println(
restClient.getSalutation());
mp-rest/url
Nemtokake titik pungkasan REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Hasil
Ing blog iki, ngarahake utamane kanggo pangembang Spring, kita ndeleng cepet babagan carane nggunakake Spring API karo MicroProfile API ing Quarkus kanggo ngembangake microservices Java lan banjur ngumpulake menyang kode binar asli sing ngirit atusan megabyte RAM lan diluncurake ing prakara milliseconds.
Kaya sing wis dingerteni, informasi luwih lengkap babagan dhukungan kanggo Spring lan MicroProfile API, uga akeh informasi migunani liyane, bisa ditemokake ing
Source: www.habr.com