Hei alle sammen, her er det tredje innlegget i Quarkus-serien!
Når man utvikler Java-mikrotjenester, blir det ofte antatt at
I litt mer detalj vil vi først se på omfanget og detaljene for hvordan Quarkus støtter Spring APIer for å vise Spring-utviklere hvordan de bruker MicroProfile API i deres daglige arbeid. Deretter skal vi dekke MicroProfile API-ene, som er nyttige for Spring-utviklere når de lager mikrotjenester.
Hvorfor Quarkus? For det første er dette live koding, det vil si automatisk omlasting av eventuelle endringer i MicroProfile API, Spring API og andre Java APIer, som utføres med bare én kommando: mvn quarkus:dev. For det andre vurderes i
Vi vil ikke gå i detalj om MicroProfile, annet enn å hjelpe Spring-utviklere til å forstå hvordan de kan bruke Spring APIer med MicroProfile APIer i Quarkus.
Containere og Kubernetes
For å holde denne artikkelen enkel, vil vi bare dekke høynivåaspektene ved støtte her.
Quarkus også
Til slutt, ved å fokusere på Kubernetes som måldistribusjonsmiljøet, bruker ikke Quarkus Java-rammeverk i tilfeller der lignende funksjonalitet er implementert på selve Kubernetes-plattformen. Tabell 1 gir et kart over den funksjonelle korrespondansen mellom Kubernetes og typiske Java-rammeverk som brukes av Spring-utviklere.
Tabell 1. Kart over funksjonell korrespondanse mellom Java-rammeverk og Kubernetes.
funksjonell
Tradisjonell vårstøvel
Kubernetes
Tjenesteoppdagelse
Eureka
DNS
Konfigurasjon
Spring Cloud Config
Konfigurer kart/hemmeligheter
Lastbalansering
Bånd (klientside)
Tjeneste, replikeringskontroller (serverside)
Kompilere og kjøre koden fra eksemplet
I denne artikkelen refererer vi til
Spring Framework APIer
Avhengighetsinjeksjon
Quarkus støtter en rekke
В
Tabell 2. Eksempler på bruk av de støttede Spring DI APIene.
Støttede Spring DI-funksjoner
Примеры
Konstruktørinjeksjon
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Feltinjeksjon
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Konfigurasjon
@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;
}
}
Nettrammeverk
MicroProfile-brukere vil elske at Quarkus støtter JAX-RS, MicroProfile Rest Client, JSON-P og JSON-B som den primære webprogrammeringsmodellen. Spring-utviklere vil være fornøyd med Quarkus' nylige støtte for Spring Web API, spesielt REST-grensesnitt. I likhet med Spring DI er hovedmålet med Spring Web API-støtte å gjøre det mulig for Spring-utviklere å bruke Spring Web APIer i forbindelse med MicroProfile APIer. Eksempler på hvordan du bruker de støttede Spring Web APIene er gitt i tabell 3, og mer informasjon og eksempler om dette emnet finner du i Quarkus-opplæringen kalt
Tabell 3. Eksempler på bruk av de støttede Spring Web APIene.
Støttede vårnettfunksjoner
Примеры
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (delvis)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Vårdata JPA
MicroProfile-brukere vil også sette pris på at Quarkus støtter JPA ved bruk av Hibernate ORM. Det er også gode nyheter for Spring-utviklere: Quarkus støtter vanlige Spring Data JPA-merknader og -typer. Eksempler på bruk av de støttede Spring Data JPA APIene er gitt i tabell 4.
В
Tabell 4. Eksempler på bruk av støttede Spring Data JPA APIer.
Støttede Spring Data JPA-funksjoner
Примеры
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Oppbevaringssted
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Depotfragmenter
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Avledede spørringsmetoder
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Brukerdefinerte søk
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 APIer
Feiltoleranse
Feiltoleransekonstruksjoner er svært viktige for å forhindre kaskadefeil og skape pålitelige mikrotjenestearkitekturer. Fjærutviklere har brukt effektbrytere for feiltoleranse i mange år.
Tabell 5. Eksempler på bruk av støttede MicroProfile Fault Tolerance APIer.
MicroProfile-feiltoleransefunksjoner
beskrivelse
Примеры
@Asynkron
Utføre logikk i en egen tråd
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@skott
Begrens antall samtidige forespørsler
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Smart feilhåndtering og gjenoppretting fra feil
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Falle tilbake
Kaller alternativ logikk i tilfelle feil
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Prøv på nytt ved forespørselsfeil
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Tidsavbrudd for feilkontroll
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Kontrolltjenester (Service Health)
Kubernetes-plattformer overvåker helsen til containere ved hjelp av spesielle tjenester. For å la den underliggende plattformen overvåke tjenester, bruker Spring-utviklere vanligvis en tilpasset HealthIndicator og Spring Boot Actuator. I Quarkus kan dette gjøres ved hjelp av MicroProfile Health, som som standard utfører en liveness-sjekk, men kan konfigureres til å sjekke liveness og beredskap samtidig. Eksempler på hvordan du bruker støttede MicroProfile Health API-er er gitt i tabell 6, og tilleggsinformasjon er gitt i Quarkus-manualen
Tabell 6: Brukseksempler på støttede MicroProfile Health APIer.
MicroProfile Health-funksjoner
beskrivelse
Примеры
@Liveness
Plattformen starter på nytt mislykkede containeriserte applikasjoner
endepunkt:
vert:8080/helse/live
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Beredskap
Plattformen vil ikke sende trafikk til containeriserte applikasjoner hvis den ikke er klar
endepunkt:
vert:8080/helse/klar
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Beregninger
Applikasjoner gir beregninger for enten operasjonelle formål (for å overvåke ytelses-SLAer) eller ikke-operative formål (forretnings-SLAer). Spring-utviklere gir beregninger ved å bruke Spring Boot Actuator og Micrometer. På sin side bruker Quarkus MicroProfile Metrics for å gi grunnlinjeberegninger (JVM og operativsystem), leverandørberegninger (Quarkus) og applikasjonsberegninger. MicroProfile Metrics krever at implementeringen støtter JSON og OpenMetrics (Prometheus) utdataformater. Eksempler på bruk av MicroProfile Metrics API er gitt i tabell 7.
В
Tabell 7. Eksempler på bruk av MicroProfile Metrics APIer.
MicroProfile Metrics-funksjoner
beskrivelse
Примеры
@Tellet
Angir en teller som teller antall ganger et kommentert objekt har blitt kalt
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Angir en måler som teller antall samtidige anrop til et kommentert objekt
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Måler
Angir en målersensor som måler verdien til et kommentert objekt
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Målt
Angir en målersensor som overvåker anropsfrekvensen til et kommentert objekt
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
En merknad som inneholder informasjon om metadata når en forespørsel om å angi eller produsere en beregning mottas
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Indikerer en tidtaker som sporer varigheten til et kommentert objekt
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Beregningsendepunkter
Applikasjonsberegninger
Grunnleggende beregninger
Leverandørberegninger
Alle beregninger
MicroProfile Rest Client
Mikrotjenester gir ofte RESTful endepunkter som krever tilsvarende klient-APIer å jobbe med. For å bruke RESTful-endepunkter bruker Spring-utviklere vanligvis RestTemplate. Quarkus tilbyr MicroProfile Rest Client API-er for å løse dette problemet, eksempler på bruk er gitt i tabell 8.
В
Tabell 8. Eksempler på bruk av MicroProfile Rest Client APIer.
MicroProfile Rest Client-funksjoner
beskrivelse
Примеры
@RegisterRestClient
Registrerer et skrevet Java-grensesnitt som en REST-klient
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Markerer implementeringen av en forekomst av et skrevet REST-klientgrensesnitt
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
påkallelse
Kaller et REST-endepunkt
System.out.println(
restClient.getSalutation());
mp-rest/url
Spesifiserer REST-endepunktet
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Resultater av
I denne bloggen, først og fremst rettet mot Spring-utviklere, tok vi en rask titt på hvordan man bruker Spring API-ene med MicroProfile API-ene i Quarkus for å utvikle Java-mikrotjenester og deretter kompilere dem til innebygd binær kode som sparer hundrevis av megabyte RAM og lanseres i et spørsmål om millisekunder.
Som du allerede har forstått, kan du finne mer informasjon om støtte for Spring og MicroProfile API, samt mye annen nyttig informasjon i
Kilde: www.habr.com