Hei kaikille, tässä on Quarkus-sarjan kolmas postaus!
Java-mikropalveluita kehitettäessä usein uskotaan niin
Hieman yksityiskohtaisemmin tarkastelemme ensin laajuutta ja yksityiskohtia siitä, kuinka Quarkus tukee Spring API:ita, jotta voimme näyttää Spring-kehittäjille, kuinka MicroProfile API:ta käytetään päivittäisessä työssään. Sitten käsittelemme MicroProfile-sovellusliittymiä, jotka ovat hyödyllisiä Spring-kehittäjille luodessaan mikropalveluita.
Miksi Quarkus? Ensinnäkin tämä on live-koodausta, eli MicroProfile API:n, Spring API:n ja muiden Java API:iden muutosten automaattista uudelleenlatausta, joka suoritetaan vain yhdellä komennolla: mvn quarkus:dev. Toiseksi, keskusteltiin
Emme mene yksityiskohtiin MicroProfilesta, paitsi auttaaksemme Spring-kehittäjiä ymmärtämään, kuinka he voivat käyttää Spring-sovellusliittymiä MicroProfile-sovellusliittymien kanssa Quarkuksessa.
Kontit ja Kubernetes
Jotta tämä artikkeli olisi yksinkertainen, käsittelemme tässä vain tuen korkean tason näkökohdat.
Quarkus myös
Lopuksi, keskittymällä Kubernetesiin kohdekäyttöönottoympäristönä, Quarkus ei käytä Java-kehyksiä tapauksissa, joissa samanlainen toiminnallisuus on toteutettu itse Kubernetes-alustan tasolla. Taulukossa 1 on kartta toiminnallisesta vastaavuudesta Kubernetesin ja tyypillisten Spring-kehittäjien käyttämien Java-kehysten välillä.
Taulukko 1. Kartta toiminnallisesta vastaavuudesta Java-kehysten ja Kubernetesin välillä.
toiminnallinen
Perinteinen kevätkenkä
Kubernetes
Palvelun löytäminen
Eureka
DNS
Konfigurointi
Spring Cloud Config
Määritä kartat/salaisuudet
Kuormituksen tasapainoittaminen
Nauha (asiakaspuoli)
Palvelu, replikointiohjain (palvelinpuoli)
Koodin kääntäminen ja suorittaminen esimerkistä
Tässä artikkelissa viittaamme
Spring Framework API:t
Riippuvuusinjektio
Quarkus tukee useita
В
Taulukko 2. Esimerkkejä tuettujen Spring DI -sovellusliittymien käytöstä.
Tuetut Spring DI -ominaisuudet
Примеры
Rakentajan ruiskutus
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Kenttäinjektio
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Kokoonpano
@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;
}
}
Web-kehys
MicroProfile-käyttäjät pitävät siitä, että Quarkus tukee JAX-RS:ää, MicroProfile Rest Clientiä, JSON-P:tä ja JSON-B:tä ensisijaisena web-ohjelmointimallina. Kevään kehittäjät ovat tyytyväisiä Quarkuksen viimeaikaiseen tukeen Spring Web API:lle, erityisesti REST-rajapinnoille. Spring DI:n tapaan Spring Web API -tuen päätavoite on antaa Spring-kehittäjille mahdollisuus käyttää Spring Web API:ita yhdessä MicroProfile API:iden kanssa. Esimerkkejä tuettujen Spring Web API:iden käytöstä on taulukossa 3, ja lisätietoja ja esimerkkejä tästä aiheesta löytyy Quarkus-opetusohjelmasta nimeltä
Taulukko 3. Esimerkkejä tuettujen Spring Web API:iden käytöstä.
Tuetut kevään verkkoominaisuudet
Примеры
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (osittainen)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Kevään tietojen yhteinen edustajakokous
MicroProfile-käyttäjät arvostavat myös sitä, että Quarkus tukee JPA:ta käyttämällä Hibernate ORM:ää. Myös Spring-kehittäjille on hyviä uutisia: Quarkus tukee yleisiä Spring Data JPA -merkintöjä ja tyyppejä. Taulukossa 4 on esimerkkejä tuettujen Spring Data JPA -sovellusliittymien käytöstä.
В
Taulukko 4. Esimerkkejä tuettujen Spring Data JPA -sovellusliittymien käytöstä.
Tuetut Spring Data JPA -ominaisuudet
Примеры
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
säilytyspaikka
JpaArkisto
PagingAndSorting Repository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Arkiston fragmentit
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Johdetut kyselymenetelmät
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Käyttäjän määrittämät kyselyt
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:t
Vikasietoisuus
Vikasietorakenteet ovat erittäin tärkeitä peräkkäisten vikojen estämisessä ja luotettavien mikropalveluarkkitehtuurien luomisessa. Kevätkehittäjät ovat käyttäneet katkaisijoita vikasietoisuuteen useiden vuosien ajan.
Taulukko 5. Esimerkkejä tuettujen MicroProfile Fault Tolerance API:iden käytöstä.
Mikroprofiilin vikasietoominaisuudet
Kuvaus
Примеры
@Asynkroninen
Logiikan suorittaminen erillisessä säikeessä
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Samanaikaisten pyyntöjen määrän rajoittaminen
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Älykäs vikojen käsittely ja vioista toipuminen
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Perääntyä
Vaihtoehtoisen logiikan kutsuminen epäonnistumisen sattuessa
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Yritä uudelleen, jos pyyntö epäonnistuu
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Vianhallinnan aikakatkaisu
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Tarkastuspalvelut (palvelun kunto)
Kubernetes-alustat seuraavat konttien kuntoa erikoispalveluiden avulla. Jotta taustalla oleva alusta voi valvoa palveluita, Spring-kehittäjät käyttävät yleensä mukautettua HealthIndicatoria ja Spring Boot Actuator -laitetta. Quarkuksessa tämä voidaan tehdä MicroProfile Health -ohjelmalla, joka oletuksena suorittaa elävyyden tarkistuksen, mutta voidaan määrittää tarkastamaan samanaikaisesti elävyys ja valmius. Esimerkkejä tuettujen MicroProfile Health API -sovellusliittymien käytöstä on taulukossa 6, ja lisätietoja on Quarkus-oppaassa.
Taulukko 6: Esimerkkejä tuettujen MicroProfile Health API -sovellusliittymien käytöstä.
MicroProfile Health -ominaisuudet
Kuvaus
Примеры
@Elävyys
Alusta käynnistää uudelleen epäonnistuneet konttisovellukset
Endpoint:
isäntä: 8080/terveys/live
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Valmius
Alusta ei lähetä liikennettä konttisovelluksiin, jos se ei ole valmis
Endpoint:
isäntä: 8080/terveys/valmis
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Mittarit
Sovellukset tarjoavat mittareita joko toiminnallisiin tarkoituksiin (suorituskykytason SLA-sopimusten seuranta) tai ei-toiminnallisiin tarkoituksiin (liiketoiminnan palvelutasosopimukset). Jousikehittäjät tarjoavat mittareita Spring Boot Actuatorin ja Micrometerin avulla. Quarkus puolestaan käyttää MicroProfile-metriikkaa tarjotakseen perusmittareita (JVM ja käyttöjärjestelmä), toimittajamittareita (Quarkus) ja sovellusmittareita. MicroProfile Metrics edellyttää, että toteutus tukee JSON- ja OpenMetrics (Prometheus) -tulostusmuotoja. Esimerkkejä MicroProfile Metrics API:n käytöstä on taulukossa 7.
В
Taulukko 7. Esimerkkejä MicroProfile Metrics -sovellusliittymien käytöstä.
MicroProfile Metrics -ominaisuudet
Kuvaus
Примеры
@laskettu
Tarkoittaa laskuria, joka laskee, kuinka monta kertaa huomautettua objektia on kutsuttu
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Tarkoittaa mittaria, joka laskee samanaikaisten kutsujen määrän huomautuksella varustettuun objektiin
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Arvioida
Tarkoittaa mittarianturia, joka mittaa kommentoidun kohteen arvon
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@ Mitattu
Tarkoittaa mittarianturia, joka tarkkailee kommentoidun kohteen soittotaajuutta
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Huomautus, joka sisältää tietoja metatiedoista, kun vastaanotetaan pyyntö mittarin syöttämiseksi tai tuottamiseksi
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Ilmaisee ajastinta, joka seuraa kommentoidun objektin kestoa
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Mittarien päätepisteet
Sovellusmittarit
Perusmittarit
Toimittajan mittarit
Kaikki mittarit
MicroProfile Rest Client
Mikropalvelut tarjoavat usein RESTful-päätepisteitä, jotka vaativat vastaavia asiakassovellusliittymiä toimiakseen. RESTful-päätepisteiden käyttämiseksi Spring-kehittäjät käyttävät yleensä RestTemplatea. Quarkus tarjoaa MicroProfile Rest Client -sovellusliittymiä tämän ongelman ratkaisemiseksi, joiden käyttöesimerkkejä on taulukossa 8.
В
Taulukko 8. Esimerkkejä MicroProfile Rest Client -sovellusliittymien käytöstä.
MicroProfile Rest Client -ominaisuudet
Kuvaus
Примеры
@RegisterRestClient
Rekisteröi kirjoitetun Java-rajapinnan REST-asiakkaaksi
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Merkitsee kirjoitetun REST-asiakasliittymän ilmentymän toteutuksen
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
rukous
Kutsuu REST-päätepistettä
System.out.println(
restClient.getSalutation());
mp-rest/url
Määrittää REST-päätepisteen
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Tulokset
Tässä ensisijaisesti Spring-kehittäjille suunnatussa blogissa tarkastelimme nopeasti, kuinka Spring-sovellusliittymiä käytetään Quarkuksen MicroProfile-sovellusliittymien kanssa Java-mikropalveluiden kehittämiseen ja niiden kääntämiseen alkuperäiseksi binäärikoodiksi, joka säästää satoja megatavuja RAM-muistia ja käynnistyy millisekuntien kysymys.
Kuten jo ymmärsit, lisätietoja Spring- ja MicroProfile-sovellusliittymien tuesta sekä paljon muuta hyödyllistä tietoa löytyy osoitteesta
Lähde: will.com