Pozdravljeni vsi, tukaj je tretja objava v seriji Quarkus!
Pri razvoju mikrostoritev Java se pogosto verjame, da
Malo bolj podrobno si bomo najprej ogledali obseg in podrobnosti o tem, kako Quarkus podpira API-je Spring, da bi razvijalcem Spring pokazali, kako uporabljati API MicroProfile pri vsakodnevnem delu. Nato bomo obravnavali API-je MicroProfile, ki so uporabni za razvijalce Spring pri ustvarjanju mikrostoritev.
Zakaj Quarkus? Prvič, to je kodiranje v živo, torej samodejno ponovno nalaganje morebitnih sprememb v MicroProfile API, Spring API in drugih Java API-jih, ki se izvede z enim samim ukazom: mvn quarkus:dev. Drugič, upoštevano v
Ne bomo se spuščali v podrobnosti o MicroProfile, razen da bi razvijalcem Spring pomagali razumeti, kako lahko uporabljajo API-je Spring z API-ji MicroProfile v Quarkusu.
Vsebniki in Kubernetes
Da bo ta članek preprost, bomo tukaj obravnavali le vidike podpore na visoki ravni.
Quarkus tudi
Nazadnje, z osredotočanjem na Kubernetes kot ciljno okolje za uvajanje, Quarkus ne uporablja ogrodij Java v primerih, ko je podobna funkcionalnost implementirana na ravni same platforme Kubernetes. Tabela 1 prikazuje zemljevid funkcionalne korespondence med Kubernetesom in tipičnimi ogrodji Java, ki jih uporabljajo razvijalci Spring.
Tabela 1. Zemljevid funkcionalnega ujemanja med ogrodji Java in Kubernetes.
Funkcionalna
Tradicionalni spomladanski škorenj
Kubernetes
Odkrivanje storitve
Eureka
DNS
konfiguracija
Spring Cloud Config
Konfiguriraj zemljevide/skrivnosti
Izravnava obremenitve
Trak (stran odjemalca)
Storitev, Replikacijski krmilnik (strežniška stran)
Prevajanje in izvajanje kode iz primera
V tem članku se sklicujemo na
API-ji Spring Framework
Vbrizgavanje odvisnosti
Quarkus podpira vrsto
В
Tabela 2. Primeri uporabe podprtih API-jev Spring DI.
Podprte funkcije Spring DI
Primeri
Vbrizgavanje konstruktorja
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Vbrizgavanje na terenu
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@ Konfiguracija
@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;
}
}
Spletno ogrodje
Uporabnikom MicroProfile bo všeč, da Quarkus podpira JAX-RS, MicroProfile Rest Client, JSON-P in JSON-B kot primarni model spletnega programiranja. Spring razvijalci bodo zadovoljni z nedavno podporo Quarkusa za Spring Web API, zlasti vmesnike REST. Podobno kot pri Spring DI je glavni cilj podpore za Spring Web API razvijalcem Spring omogočiti uporabo Spring Web API-jev v povezavi z API-ji MicroProfile. Primeri uporabe podprtih Spring Web API-jev so navedeni v tabeli 3, več informacij in primerov o tej temi pa lahko najdete v vadnici Quarkus, imenovani
Tabela 3. Primeri uporabe podprtih Spring Web API-jev.
Podprte spletne funkcije Spring
Primeri
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (delno)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Pomladni podatki JPA
Uporabniki MicroProfile bodo prav tako cenili, da Quarkus podpira JPA z uporabo Hibernate ORM. Obstaja tudi dobra novica za razvijalce Spring: Quarkus podpira običajne opombe in vrste Spring Data JPA. Primeri uporabe podprtih API-jev Spring Data JPA so podani v tabeli 4.
В
Tabela 4. Primeri uporabe podprtih API-jev Spring Data JPA.
Podprte funkcije Spring Data JPA
Primeri
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Repozitorij
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Fragmenti skladišča
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Izpeljane poizvedovalne metode
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Uporabniško določene poizvedbe
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-ji MicroProfile
Toleranca napak
Konstrukti tolerance napak so zelo pomembni za preprečevanje kaskadnih okvar in ustvarjanje zanesljivih arhitektur mikrostoritev. Razvijalci vzmeti že vrsto let uporabljajo odklopnike za odpornost na napake.
Tabela 5. Primeri uporabe podprtih API-jev MicroProfile Fault Tolerance.
Funkcije tolerance napak MicroProfile
Opis
Primeri
@Asinhrono
Izvajanje logike v ločeni niti
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Pregrada
Omejite število hkratnih zahtev
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@Varovalka
Pametno ravnanje z okvarami in okrevanje po okvarah
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Pasti nazaj
Klicanje alternativne logike v primeru okvare
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Poskusi znova ob neuspešni zahtevi
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Časovna omejitev nadzora napake
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Preverjanje storitev (Service Health)
Platforme Kubernetes spremljajo zdravje vsebnikov s pomočjo posebnih storitev. Da bi osnovni platformi omogočili spremljanje storitev, razvijalci Spring običajno uporabljajo HealthIndicator po meri in Spring Boot Actuator. V Quarkusu je to mogoče storiti z uporabo MicroProfile Health, ki privzeto izvede preverjanje stanja delovanja, vendar ga je mogoče konfigurirati tako, da istočasno preverja stanje delovanja in pripravljenost. Primeri uporabe podprtih API-jev MicroProfile Health so navedeni v tabeli 6, dodatne informacije pa so na voljo v priročniku Quarkus
Tabela 6: Primeri uporabe podprtih API-jev MicroProfile Health.
Funkcije MicroProfile Health
Opis
Primeri
@Živost
Platforma znova zažene neuspele kontejnerske aplikacije
Končna točka:
gostitelj:8080/health/live
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Pripravljenost
Platforma ne bo pošiljala prometa aplikacijam v kontejnerjih, če ni pripravljena
Končna točka:
gostitelj:8080/zdravje/pripravljen
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Metrike
Aplikacije zagotavljajo metrike bodisi za operativne namene (za spremljanje zmogljivosti SLA) ali neoperativne namene (poslovne SLA). Razvijalci pomladi zagotavljajo meritve z uporabo pomladnega zagonskega aktuatorja in mikrometra. Quarkus pa uporablja metrike MicroProfile za zagotavljanje osnovnih metrik (JVM in operacijski sistem), metrik prodajalca (Quarkus) in metrik aplikacij. MicroProfile Metrics zahteva, da izvedba podpira izhodne formate JSON in OpenMetrics (Prometheus). Primeri uporabe API-ja MicroProfile Metrics so podani v tabeli 7.
В
Tabela 7. Primeri uporabe API-jev MicroProfile Metrics.
Funkcije meritev mikroprofila
Opis
Primeri
@Prešteto
Označuje števec števca, ki šteje, kolikokrat je bil klican označen objekt
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Označuje merilnik, ki šteje število sočasnih klicev označenemu objektu
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Merilec
Označuje merilni senzor, ki meri vrednost označenega predmeta
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Označuje senzor merilnika, ki spremlja frekvenco klica označenega predmeta
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Opomba, ki vsebuje informacije o metapodatkih, ko prejmete zahtevo za vnos ali izdelavo metrike
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Označuje časovnik, ki sledi trajanju označenega predmeta
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Končne točke meritev
Meritve aplikacije
Osnovne metrike
Meritve prodajalca
Vse meritve
MicroProfile Rest Client
Mikrostoritve pogosto zagotavljajo končne točke RESTful, ki za delo zahtevajo ustrezne odjemalske API-je. Za uporabo končnih točk RESTful razvijalci Spring običajno uporabljajo RestTemplate. Quarkus ponuja API-je MicroProfile Rest Client za rešitev te težave, katerih primeri uporabe so podani v tabeli 8.
В
Tabela 8. Primeri uporabe API-jev MicroProfile Rest Client.
Funkcije odjemalca MicroProfile Rest
Opis
Primeri
@RegisterRestClient
Registrira tipiziran vmesnik Java kot odjemalca REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Označuje izvedbo primerka tipiziranega odjemalskega vmesnika REST
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Invokacija
Pokliče končno točko REST
System.out.println(
restClient.getSalutation());
mp-rest/url
Podaja končno točko REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Rezultati
V tem spletnem dnevniku, namenjenem predvsem razvijalcem Spring, smo si na hitro ogledali, kako uporabiti API-je Spring z API-ji MicroProfile v Quarkusu za razvoj mikrostoritev Java in jih nato prevesti v izvorno binarno kodo, ki prihrani na stotine megabajtov RAM-a in se zažene v stvar milisekund.
Kot ste že razumeli, lahko več informacij o podpori za API-je Spring in MicroProfile ter veliko drugih koristnih informacij najdete v
Vir: www.habr.com