Ahojte všetci, tu je tretí príspevok v sérii Quarkus!
Pri vývoji mikroslužieb Java sa často verí, že
Trochu podrobnejšie sa najprv pozrieme na rozsah a podrobnosti o tom, ako Quarkus podporuje Spring API, aby sme vývojárom Spring ukázali, ako používať MicroProfile API pri ich každodennej práci. Potom sa budeme venovať rozhraniam MicroProfile API, ktoré sú užitočné pre vývojárov Spring pri vytváraní mikroslužieb.
Prečo práve Quarkus? Po prvé, ide o živé kódovanie, teda automatické opätovné načítanie akýchkoľvek zmien v MicroProfile API, Spring API a iných Java API, ktoré sa vykonáva iba jedným príkazom: mvn quarkus:dev. Po druhé, diskutované v
Nebudeme zachádzať do podrobností o MicroProfile, okrem toho, aby sme pomohli vývojárom Spring pochopiť, ako môžu používať Spring API s MicroProfile API v Quarkus.
Kontajnery a Kubernetes
Aby bol tento článok jednoduchý, budeme sa tu venovať iba aspektom podpory na vysokej úrovni.
Quarkus tiež
Nakoniec, tým, že sa Quarkus zameral na Kubernetes ako cieľové prostredie nasadenia, nepoužíva frameworky Java v prípadoch, keď je podobná funkcionalita implementovaná na úrovni samotnej platformy Kubernetes. Tabuľka 1 poskytuje mapu funkčnej korešpondencie medzi Kubernetes a typickými frameworkami Java, ktoré používajú vývojári Spring.
Tabuľka 1. Mapa funkčnej korešpondencie medzi frameworkami Java a Kubernetes.
funkčné
Tradičné jarné čižmy
Kubernetes
Objavenie služby
Eureka
DNS
konfigurácia
Jarná konfigurácia cloudu
Konfigurácia máp/tajomstiev
Rozdelenie výkonu
Stuha (strana klienta)
Služba, kontrolér replikácie (strana servera)
Kompilácia a spustenie kódu z príkladu
V tomto článku sa odvolávame
Spring Framework API
Injekcia závislostí
Quarkus podporuje celý rad
В
Tabuľka 2. Príklady použitia podporovaných rozhraní API Spring DI.
Podporované funkcie Spring DI
príklady
Konštrukčné vstrekovanie
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Poľná injekcia
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Konfigurácia
@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;
}
}
Webový rámec
Používatelia MicroProfile budú milovať, že Quarkus podporuje JAX-RS, MicroProfile Rest Client, JSON-P a JSON-B ako primárny webový programovací model. Jarných vývojárov poteší nedávna podpora Quarkusu pre Spring Web API, najmä rozhrania REST. Podobne ako pri Spring DI, hlavným cieľom podpory Spring Web API je umožniť vývojárom Spring používať Spring Web API v spojení s MicroProfile API. Príklady použitia podporovaných rozhraní Spring Web API sú uvedené v tabuľke 3 a ďalšie informácie a príklady na túto tému nájdete v návode Quarkus s názvom
Tabuľka 3. Príklady použitia podporovaných rozhraní Spring Web API.
Podporované jarné webové funkcie
príklady
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (čiastočná)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Jarné údajeJPA
Používatelia MicroProfile tiež ocenia, že Quarkus podporuje JPA pomocou Hibernate ORM. Je tu tiež dobrá správa pre vývojárov Spring: Quarkus podporuje bežné anotácie a typy Spring Data JPA. Príklady použitia podporovaných rozhraní Spring Data JPA API sú uvedené v tabuľke 4.
В
Tabuľka 4. Príklady používania podporovaných rozhraní API Spring Data JPA.
Podporované funkcie Spring Data JPA
príklady
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
sklad
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Fragmenty úložiska
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Odvodené metódy dotazov
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Používateľom definované dotazy
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
Odolnosť proti chybám
Konštrukcie odolnosti voči chybám sú veľmi dôležité na predchádzanie kaskádovým zlyhaniam a vytváranie spoľahlivých architektúr mikroslužieb. Vývojári Spring používajú ističe na odolnosť voči poruchám už mnoho rokov.
Tabuľka 5. Príklady použitia podporovaných rozhraní API MicroProfile Fault Tolerance.
Funkcie odolnosti proti chybám MicroProfile
Popis
príklady
@Asynchrónne
Vykonávanie logiky v samostatnom vlákne
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Obmedzte počet súčasných žiadostí
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@Istič
Inteligentné riešenie porúch a zotavenie z porúch
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Fallback
Volanie alternatívnej logiky v prípade zlyhania
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Skúste to znova pri zlyhaní žiadosti
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Časový limit kontroly zlyhania
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Kontrola služieb (stav služby)
Platformy Kubernetes monitorujú stav kontajnerov pomocou špeciálnych služieb. Aby mohla základná platforma monitorovať služby, vývojári Spring zvyčajne používajú vlastný HealthIndicator a Spring Boot Actuator. V Quarkus sa to dá urobiť pomocou MicroProfile Health, ktorý štandardne vykonáva kontrolu živosti, ale dá sa nakonfigurovať tak, aby súčasne kontrolovala živosť a pripravenosť. Príklady použitia podporovaných API MicroProfile Health sú uvedené v tabuľke 6 a ďalšie informácie sú uvedené v príručke Quarkus
Tabuľka 6: Príklady použitia podporovaných rozhraní API MicroProfile Health.
Funkcie MicroProfile Health
Popis
príklady
@Životnosť
Platforma reštartuje neúspešné kontajnerové aplikácie
koncový bod:
hostiteľ: 8080/zdravie/živo
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Pripravenosť
Platforma nebude posielať návštevnosť do kontajnerových aplikácií, ak nie je pripravená
koncový bod:
hostiteľ: 8080/zdravie/pripravené
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Metriky
Aplikácie poskytujú metriky buď na prevádzkové účely (na monitorovanie výkonu SLA) alebo na neprevádzkové účely (obchodné SLA). Spring vývojári poskytujú metriky pomocou Spring Boot Actuator a Micrometer. Quarkus zase používa MicroProfile Metrics na poskytovanie základných metrík (JVM a operačný systém), metrík dodávateľov (Quarkus) a metrík aplikácií. MicroProfile Metrics vyžaduje, aby implementácia podporovala výstupné formáty JSON a OpenMetrics (Prometheus). Príklady použitia MicroProfile Metrics API sú uvedené v tabuľke 7.
В
Tabuľka 7. Príklady použitia MicroProfile Metrics API.
Funkcie metrík MicroProfile
Popis
príklady
@Počítané
Označuje počítadlo počítadla, ktoré počíta, koľkokrát bol anotovaný objekt vyvolaný
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Označuje meradlo, ktoré počíta počet súbežných volaní na anotovaný objekt
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gauge
Označuje merací senzor, ktorý meria hodnotu anotovaného objektu
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Označuje merací senzor, ktorý monitoruje frekvenciu hovorov anotovaného objektu
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Anotácia obsahujúca informácie o metadátach pri prijatí požiadavky na zadanie alebo vytvorenie metriky
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Označuje časovač, ktorý sleduje trvanie anotovaného objektu
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Koncové body metrík
Aplikačné metriky
Základné metriky
Metriky dodávateľa
Všetky metriky
Klient pre zvyšok MicroProfile
Mikroslužby často poskytujú koncové body RESTful, ktoré na prácu vyžadujú zodpovedajúce klientske rozhrania API. Na používanie koncových bodov RESTful vývojári Spring zvyčajne používajú RestTemplate. Quarkus ponúka na vyriešenie tohto problému rozhrania MicroProfile Rest Client API, ktorých príklady použitia sú uvedené v tabuľke 8.
В
Tabuľka 8. Príklady použitia MicroProfile Rest Client API.
Funkcie klienta pre zvyšok MicroProfile
Popis
príklady
@RegisterRestClient
Registruje napísané rozhranie Java ako klienta REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Označuje implementáciu inštancie typizovaného klientskeho rozhrania REST
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
invokácie
Volá koncový bod REST
System.out.println(
restClient.getSalutation());
mp-rest/url
Určuje koncový bod REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Výsledky
V tomto blogu, ktorý je zameraný predovšetkým na vývojárov Spring, sme sa rýchlo pozreli na to, ako používať Spring API s MicroProfile API v Quarkus na vývoj Java mikroslužieb a potom ich skompilovať do natívneho binárneho kódu, ktorý ušetrí stovky megabajtov RAM a spustí sa v otázkou milisekúnd.
Ako ste už pochopili, viac informácií o podpore rozhraní Spring a MicroProfile API, ako aj množstvo ďalších užitočných informácií nájdete v
Zdroj: hab.com