Salute à tutti, eccu u terzu postu di a serie Quarkus !
Quandu si sviluppanu microservizi Java, hè spessu crede chì
In un pocu di più di dettu, avemu da prima fighjà u scopu è i dettagli di cumu Quarkus supporta l'API Spring per mustrà i sviluppatori Spring cumu utilizà l'API MicroProfile in u so travagliu di ghjornu. Allora copreremu l'API MicroProfile, chì sò utili per i sviluppatori Spring quandu creanu microservizi.
Perchè Quarkus? Prima, questu hè a codificazione in diretta, vale à dì, ricaricamentu automaticu di qualsiasi cambiamenti in l'API MicroProfile, Spring API è altre API Java, chì hè realizatu cù un solu cumandamentu: mvn quarkus:dev. Siconda, discutitu in
Ùn andemu micca in dettagliu nantu à MicroProfile, salvu per aiutà i sviluppatori Spring à capisce cumu si ponu utilizà l'API Spring cù l'API MicroProfile in Quarkus.
Containers è Kubernetes
Per mantene stu articulu simplice, avemu da copre solu l'aspetti di altu livellu di supportu quì.
Quarkus ancu
Infine, focalizendu Kubernetes cum'è l'ambiente di implementazione di destinazione, Quarkus ùn usa micca frameworks Java in i casi induve a funziunalità simili hè implementata à u livellu di a piattaforma Kubernetes stessa. A Tabella 1 furnisce una mappa di a corrispondenza funziunale trà Kubernetes è i frameworks Java tipici utilizati da i sviluppatori Spring.
Table 1. Mappa di currispundenza funziunale trà i frameworks Java è Kubernetes.
Funziunalità
Stivale di primavera tradiziunale
Kubernetes
Scuperta di serviziu
Eureka
DNS
Paràmetri
Spring Cloud Config
Config Maps / Secrets
Equilibrio di carica
Ribbon (lato cliente)
Serviziu, Controller di Replicazione (latu di u servitore)
Cumpilà è eseguisce u codice da l'esempiu
In questu articulu avemu riferitu
Spring Framework API
Iniezione di Dipendenza
Quarkus supporta una gamma di
В
Table 2. Esempii di usu di l'API Spring DI supportate.
Funzioni Spring DI supportate
esempi
Iniezione di custruttore
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Iniezione di campu
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Configurazione
@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;
}
}
quadru web
L'utilizatori di MicroProfile amarà chì Quarkus supporta JAX-RS, MicroProfile Rest Client, JSON-P è JSON-B cum'è u mudellu di prugrammazione web primariu. I sviluppatori di primavera seranu cuntenti di u supportu recente di Quarkus per l'API Spring Web, in particulare l'interfacce REST. Simile à Spring DI, u scopu principale di u supportu Spring Web API hè di permette à i sviluppatori Spring di utilizà Spring Web API in cunjunzione cù l'API MicroProfile. Esempii di cumu utilizà l'API Spring Web supportati sò furniti in a Tabella 3, è più infurmazioni è esempi nantu à questu tema ponu esse truvati in u tutoriale Quarkus chjamatu.
Table 3. Esempii di usu di l'API Spring Web supportati.
Funzioni Web Spring supportate
esempi
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (parziale)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Spring DataJPA
L'utilizatori di MicroProfile apprezzeranu ancu chì Quarkus supporta JPA cù l'ORM Hibernate. Ci hè ancu una bona nutizia per i sviluppatori di Spring: Quarkus sustene l'annotazioni è i tipi di Spring Data JPA cumuni. Esempii di usu di l'API Spring Data JPA supportate sò datu in a Tabella 4.
В
Table 4. Esempii di usu di Spring Data JPA API supportati.
Funzioni di Spring Data JPA supportate
esempi
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Repository
JpaRepository
PagingAnd SortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Frammenti di repository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Metodi di ricerca derivati
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Interrogazioni definite da l'utilizatori
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
Tolleranza à i difetti
I custruzzioni di tolleranza à i difetti sò assai impurtanti per prevene i fallimenti in cascata è per creà architetture di microservizi affidabili. I sviluppatori di primavera anu utilizatu circuit-breakers per a toleranza di difetti per parechji anni.
Tabella 5. Esempii d'utilizazione di l'API MicroProfile Fault Tolerance supportate.
Funzioni di Tolleranza à i Guasti MicroProfile
discrizzione
esempi
@Asincronu
Eseguisce a logica in un filu separatu
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Paratia
Limità u numeru di richieste simultanee
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Gestione intelligente di fallimenti è ricuperazione da fallimenti
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Fallback
Chjama a logica alternativa in casu di fallimentu
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Riprova in casu di fallimentu di a dumanda
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Timeout di cuntrollu di fallimentu
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Cuntrolla di servizii (serviziu di salute)
I plataformi Kubernetes monitoranu a salute di i cuntenituri cù servizii speciali. Per permette à a piattaforma sottostante di monitorà i servizii, i sviluppatori di Spring usanu tipicamente un HealthIndicator persunalizatu è Spring Boot Actuator. In Quarkus, questu pò esse fattu cù MicroProfile Health, chì per difettu esegue un cuntrollu di vivacità, ma pò esse cunfiguratu per verificà simultaneamente a vivacità è a prontezza. Esempii di cumu utilizà l'API MicroProfile Health supportati sò furniti in a Tabella 6, è infurmazioni supplementari sò furnite in u manuale di Quarkus.
Tabella 6: Esempi d'usu di l'API MicroProfile Health supportate.
Funzioni di MicroProfile Health
discrizzione
esempi
@Vivanza
A piattaforma riavvia l'applicazioni containerizzate falluti
Puntu finale:
host: 8080/health/live
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Pronta
A piattaforma ùn mandarà micca u trafficu à l'applicazioni containerizzate se ùn hè micca pronta
Puntu finale:
host: 8080/health/ready
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Metriche
L'applicazioni furniscenu metriche sia per scopi operativi (per monitorà SLA di rendiment) sia per scopi non operativi (SLA di cummerciale). I sviluppatori di primavera furniscenu metriche cù Spring Boot Actuator è Micrometer. In turnu, Quarkus usa MicroProfile Metrics per furnisce metriche di basa (JVM è sistema operatore), metriche di venditore (Quarkus) è metriche di l'applicazione. MicroProfile Metrics richiede chì l'implementazione supporta i formati di output JSON è OpenMetrics (Prometheus). Esempii di usu di l'API MicroProfile Metrics sò datu in a Tabella 7.
В
Table 7. Esempii di usu di MicroProfile Metrics API.
Funzioni di MicroProfile Metrics
discrizzione
esempi
@cuntatu
Denota un contatore contatore chì conta u numeru di volte chì un oggettu annotatu hè statu chjamatu
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Denota un gauge chì conta u numeru di chjamate simultanee à un oggettu annotatu
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gauge
Denota un sensor di calibre chì misura u valore di un oggettu annotatu
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Denota un sensoru di metru chì monitorizza a freccia di chjama di un oggettu annotatu
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Una annotazione chì cuntene infurmazione nantu à i metadati quandu una dumanda hè ricevuta per inserisce o pruduce una metrica
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Indica un timer chì traccia a durata di un oggettu annotatu
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Punti finali di metrica
Metri di l'applicazione
Metriche basiche
metrica di u venditore
Tutti i metrichi
MicroProfile Rest Client
I microservizi spessu furniscenu punti finali RESTful chì necessitanu API di cliente currispondenti per travaglià. Per utilizà l'endpoint RESTful, i sviluppatori Spring generalmente utilizanu RestTemplate. Quarkus offre MicroProfile Rest Client APIs per risolve stu prublema, esempi di usu di quale sò datu in a Tabella 8.
В
Table 8. Esempii di usu di MicroProfile Rest Client API.
MicroProfile Rest Client Features
discrizzione
esempi
@RegisterRestClient
Registra una interfaccia Java digitata cum'è un cliente REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Marca l'implementazione di una istanza di una interfaccia cliente REST tipata
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Invocazione
Chjama un endpoint REST
System.out.println(
restClient.getSalutation());
mp-rest/url
Specifica l'endpoint REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Risultati
In questu blog, destinatu principarmenti à i sviluppatori di Spring, avemu fattu un sguardu rapidu à cumu utilizà l'API Spring cù l'API MicroProfile in Quarkus per sviluppà i microservizi Java è poi compilalli in codice binariu nativu chì salva centinaie di megabyte di RAM è lancia in una questione di millisecondi.
Comu avete digià capitu, più infurmazione nantu à u supportu per l'API Spring è MicroProfile, è ancu assai altre informazioni utili, ponu esse truvate in
Source: www.habr.com