Tere kõigile, siin on Quarkuse sarja kolmas postitus!
Java mikroteenuste arendamisel arvatakse sageli, et
Pisut üksikasjalikumalt vaatleme esmalt Quarkuse Spring API-de toetamise ulatust ja üksikasju, et näidata Springi arendajatele, kuidas kasutada MicroProfile API-d oma igapäevases töös. Seejärel käsitleme MicroProfile API-sid, mis on kasulikud Springi arendajatele mikroteenuste loomisel.
Miks Quarkus? Esiteks on see reaalajas kodeerimine, st MicroProfile API, Spring API ja muude Java API-de muudatuste automaatne uuesti laadimine, mis toimub vaid ühe käsuga: mvn quarkus:dev. Teiseks arutati aastal
Me ei käsitle MicroProfile'i üksikasju, välja arvatud selleks, et aidata Springi arendajatel mõista, kuidas nad saavad Quarkuses kasutada Spring API-sid MicroProfile'i API-dega.
Konteinerid ja Kubernetes
Et see artikkel oleks lihtne, käsitleme siin ainult toe kõrgetasemelisi aspekte.
Kvarkus ka
Lõpuks, keskendudes Kubernetesele kui sihtjuurutuskeskkonnale, ei kasuta Quarkus Java raamistikke juhtudel, kui sarnaseid funktsioone rakendatakse Kubernetese platvormi enda tasemel. Tabelis 1 on toodud funktsionaalse vastavuse kaart Kubernetese ja Springi arendajate poolt kasutatavate tüüpiliste Java-raamistike vahel.
Tabel 1. Java raamistike ja Kubernetese vahelise funktsionaalse vastavuse kaart.
Funktsionaalne
Traditsiooniline kevadsaabas
Kubernetes
Teenuse avastamine
Eureka
DNS
konfiguratsioon
Spring Cloud Config
Kaartide/saladuste konfigureerimine
Koormuse tasakaalustamine
Lint (kliendipool)
Teenus, replikatsioonikontroller (serveri pool)
Koodi koostamine ja käivitamine näitest
Selles artiklis viitame
Spring Framework API-d
Sõltuvuse süstimine
Quarkus toetab mitmesuguseid
В
Tabel 2. Näited toetatud Spring DI API-de kasutamisest.
Toetatud kevadise DI funktsioonid
näited
Konstruktori süstimine
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Sissepritse väljale
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Konfiguratsioon
@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;
}
}
Veebiraamistik
MicroProfile'i kasutajatele meeldib, et Quarkus toetab peamise veebiprogrammeerimismudelina JAX-RS-i, MicroProfile Rest Client-i, JSON-P-d ja JSON-B-d. Kevadised arendajad on rahul Quarkuse hiljutise toega Spring Web API-le, eriti REST-liidestele. Sarnaselt Spring DI-ga on Spring Web API toe peamine eesmärk võimaldada Springi arendajatel kasutada Spring Web API-sid koos MicroProfile API-dega. Toetatud Spring Web API-de kasutamise näited on toodud tabelis 3 ning rohkem teavet ja näiteid selle teema kohta leiate Quarkuse õpetusest nimega
Tabel 3. Näited toetatud Spring Web API-de kasutamisest.
Toetatud kevadised veebifunktsioonid
näited
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (osaline)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Kevadine DataJPA
MicroProfile'i kasutajad hindavad ka seda, et Quarkus toetab JPA-d, kasutades hibernate ORM-i. Hea uudis on ka Springi arendajatele: Quarkus toetab tavalisi Spring Data JPA annotatsioone ja tüüpe. Toetatud Spring Data JPA API-de kasutamise näited on toodud tabelis 4.
В
Tabel 4. Näited toetatud Spring Data JPA API-de kasutamisest.
Toetatud Spring Data JPA funktsioonid
näited
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Hoidla
Jpa hoidla
PagingAndSorting Repositoorium
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Hoidla fragmendid
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Tuletatud päringumeetodid
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Kasutaja määratud päringud
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-d
Veataluvus
Veataluvuse konstruktsioonid on väga olulised kaskaadtõrgete ärahoidmiseks ja usaldusväärsete mikroteenuste arhitektuuride loomiseks. Kevade arendajad on tõrketaluvuse tagamiseks kaitselüliteid kasutanud juba aastaid.
Tabel 5. Näited toetatud MicroProfile'i tõrketaluvuse API-de kasutamisest.
Mikroprofiili tõrketaluvuse omadused
Kirjeldus
näited
@Asünkroonne
Loogika teostamine eraldi lõimes
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Piirake samaaegsete päringute arvu
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Nutikas rikete käsitlemine ja tõrgetest taastumine
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Tagasi
Alternatiivse loogika kutsumine ebaõnnestumise korral
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Taotluse ebaõnnestumisel proovige uuesti
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Rikkekontrolli ajalõpp
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Teenuste kontrollimine (teenuste tervis)
Kubernetese platvormid jälgivad konteinerite tervist eriteenuste abil. Et võimaldada aluseks oleval platvormil teenuseid jälgida, kasutavad Springi arendajad tavaliselt kohandatud terviseindikaatorit ja Spring Boot Actuator. Quarkuses saab seda teha MicroProfile Healthi abil, mis vaikimisi teostab elavuse kontrolli, kuid mida saab seadistada nii, et see kontrolliks samaaegselt ka elavust ja valmisolekut. Näited toetatud MicroProfile Health API-de kasutamise kohta on toodud tabelis 6 ja lisateavet leiate Quarkuse käsiraamatust.
Tabel 6: Toetatud MicroProfile Health API-de kasutamise näited.
MicroProfile Healthi funktsioonid
Kirjeldus
näited
@Elus
Platvorm taaskäivitab ebaõnnestunud konteinerrakendused
Lõpp-punkt:
host:8080/tervis/live
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Valmidus
Platvorm ei saada liiklust konteinerrakendustesse, kui see pole valmis
Lõpp-punkt:
host:8080/tervis/valmis
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Mõõdikud
Rakendused pakuvad mõõdikuid kas tööeesmärkidel (jõudluse SLA-de jälgimiseks) või mitteoperatiivsetel eesmärkidel (äri SLA-d). Vedruarendajad pakuvad mõõdikuid Spring Boot Actuator ja Micrometer abil. Quarkus omakorda kasutab MicroProfile Metrics, et pakkuda baasmõõdikuid (JVM ja operatsioonisüsteem), hankija mõõdikuid (Quarkus) ja rakenduste mõõdikuid. MicroProfile Metrics nõuab, et rakendus toetaks JSON-i ja OpenMetricsi (Prometheus) väljundvorminguid. MicroProfile Metrics API kasutamise näited on toodud tabelis 7.
В
Tabel 7. Näited MicroProfile Metrics API-de kasutamisest.
Mikroprofiili mõõdikute funktsioonid
Kirjeldus
näited
@Loendatud
Tähistab loendurit, mis loendab, mitu korda annoteeritud objektile on helistatud
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Tähistab mõõdikut, mis loeb samaaegsete kõnede arvu annoteeritud objektile
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gauge
Tähistab mõõteandurit, mis mõõdab annoteeritud objekti väärtust
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Mõõdukas
Tähistab arvesti andurit, mis jälgib annoteeritud objekti kõne sagedust
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Märkus, mis sisaldab teavet metaandmete kohta, kui saadakse taotlus mõõdiku sisestamiseks või koostamiseks
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Näitab taimerit, mis jälgib annoteeritud objekti kestust
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Mõõdikute lõpp-punktid
Rakenduse mõõdikud
Põhilised mõõdikud
Tarnija mõõdikud
Kõik mõõdikud
MicroProfile Rest Client
Mikroteenused pakuvad sageli RESTful lõpp-punkte, millega töötamiseks on vaja vastavaid kliendi API-sid. RESTfuli lõpp-punktide kasutamiseks kasutavad Spring arendajad tavaliselt RestTemplate'i. Quarkus pakub selle probleemi lahendamiseks MicroProfile Rest Client API-sid, mille kasutamise näited on toodud tabelis 8.
В
Tabel 8. Näited MicroProfile Rest Client API-de kasutamisest.
MicroProfile Rest Client funktsioonid
Kirjeldus
näited
@RegisterRestClient
Registreerib tipitud Java-liidese REST-kliendina
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Tähistab tipitud REST-kliendiliidese eksemplari rakendamist
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Kutsumine
Kutsub REST-i lõpp-punkti
System.out.println(
restClient.getSalutation());
mp-rest/url
Määrab REST-i lõpp-punkti
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Tulemused
Selles peamiselt Springi arendajatele suunatud ajaveebis vaatasime lühidalt, kuidas kasutada Spring API-sid Quarkuse MicroProfile API-dega, et arendada Java mikroteenuseid ja seejärel kompileerida need natiivseks kahendkoodiks, mis säästab sadu megabaite RAM-i ja käivitub millisekundite küsimus.
Nagu juba aru saite, leiate lisateavet Spring ja MicroProfile API-de toe kohta ning palju muud kasulikku teavet
Allikas: www.habr.com