Hola a tots, aquí teniu la tercera publicació de la sèrie Quarkus!
Quan es desenvolupen microserveis Java, sovint es creu que
Amb una mica més de detall, primer veurem l'abast i els detalls de com Quarkus admet les API de Spring per mostrar als desenvolupadors de Spring com utilitzar l'API MicroProfile en el seu dia a dia. A continuació, tractarem les API de MicroProfile, que són útils per als desenvolupadors de Spring quan creen microserveis.
Per què Quarkus? En primer lloc, es tracta de codificació en directe, és a dir, la recàrrega automàtica de qualsevol canvi a l'API MicroProfile, l'API Spring i altres API de Java, que es realitza amb només una ordre: mvn quarkus:dev. En segon lloc, comentat a
No entrarem en detalls sobre MicroProfile, sinó per ajudar els desenvolupadors de Spring a entendre com poden utilitzar les API de Spring amb les API de MicroProfile a Quarkus.
Contenidors i Kubernetes
Per mantenir aquest article senzill, només tractarem els aspectes d'alt nivell del suport aquí.
Quarkus també
Finalment, en centrar-se en Kubernetes com a entorn de desplegament objectiu, Quarkus no utilitza marcs Java en els casos en què s'implementa una funcionalitat similar al nivell de la pròpia plataforma Kubernetes. La taula 1 proporciona un mapa de la correspondència funcional entre Kubernetes i els frameworks Java típics utilitzats pels desenvolupadors de Spring.
Taula 1. Mapa de correspondència funcional entre frameworks Java i Kubernetes.
Funcional
Bota de primavera tradicional
Kubernetes
Descobriment de serveis
Eureka
DNS
Configuració
Spring Cloud Configuració
Configuració de mapes/secrets
Equilibri de càrregues
Cinta (costat del client)
Servei, controlador de rèplica (costat del servidor)
Compilant i executant el codi de l'exemple
En aquest article ens referim
API de Spring Framework
Injecció de dependència
Quarkus admet una varietat de
В
Taula 2. Exemples d'ús de les API Spring DI admeses.
Funcions de Spring DI compatibles
Примеры
Injecció del constructor
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Injecció de camp
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Configuració
@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;
}
}
Marc web
Els usuaris de MicroProfile els encantarà que Quarkus admeti JAX-RS, MicroProfile Rest Client, JSON-P i JSON-B com a model de programació web principal. Els desenvolupadors de Spring estaran satisfets amb el suport recent de Quarkus per a l'API Spring Web, en particular les interfícies REST. De manera similar al Spring DI, l'objectiu principal del suport de l'API Spring Web és permetre als desenvolupadors de Spring utilitzar les API web de Spring juntament amb les API de MicroProfile. A la taula 3 es proporcionen exemples de com utilitzar les API web de Spring admeses, i es poden trobar més informació i exemples sobre aquest tema al tutorial de Quarkus anomenat
Taula 3. Exemples d'ús de les API web de Spring admeses.
Funcions web de Spring compatibles
Примеры
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (parcial)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Spring DataJPA
Els usuaris de MicroProfile també apreciaran que Quarkus admet JPA mitjançant l'ORM d'Hibernate. També hi ha bones notícies per als desenvolupadors de Spring: Quarkus admet anotacions i tipus JPA de Spring Data comunes. A la taula 4 es donen exemples d'ús de les API JPA de Spring Data admeses.
В
Taula 4. Exemples d'ús de les API JPA de Spring Data admeses.
Característiques JPA de Spring Data compatibles
Примеры
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Dipòsit
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Fragments del dipòsit
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Mètodes de consulta derivats
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Consultes definides per l'usuari
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 de MicroProfile
Falta de tolerància
Les construccions de tolerància a errors són molt importants per prevenir errors en cascada i crear arquitectures de microserveis fiables. Els desenvolupadors de Spring han estat utilitzant interruptors per a la tolerància a fallades durant molts anys.
Taula 5. Exemples d'ús de les API de tolerància a errors de MicroProfile compatibles.
Característiques de tolerància a errors de MicroProfile
Descripció
Примеры
@Asíncrons
Executant la lògica en un fil separat
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Mampara
Limitació del nombre de peticions simultànies
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@Tallacircuits
Gestió intel·ligent de fallades i recuperació de fallades
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Retrocedir
Crida a lògica alternativa en cas de fallada
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Torna-ho a provar en cas d'error de sol·licitud
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Temps d'espera del control d'errors
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Serveis de comprovació (Salut del servei)
Les plataformes Kubernetes controlen la salut dels contenidors mitjançant serveis especials. Per permetre que la plataforma subjacent supervisi els serveis, els desenvolupadors de Spring solen utilitzar un HealthIndicator i un actuador d'arrencada de Spring personalitzats. A Quarkus, això es pot fer mitjançant MicroProfile Health, que de manera predeterminada realitza una comprovació de vivacitat, però es pot configurar per comprovar simultàniament la vitalitat i la preparació. A la Taula 6 es proporcionen exemples de com utilitzar les API de MicroProfile Health admeses i es proporciona informació addicional al manual de Quarkus
Taula 6: exemples d'ús de les API MicroProfile Health admeses.
Característiques de MicroProfile Health
Descripció
Примеры
@Vivència
La plataforma reinicia les aplicacions en contenidors fallides
Punt final:
host:8080/health/live
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Preparació
La plataforma no enviarà trànsit a aplicacions en contenidors si no està preparada
Punt final:
host:8080/health/ready
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Mètriques
Les aplicacions proporcionen mètriques amb finalitats operatives (per supervisar els SLA de rendiment) o amb finalitats no operatives (SLA comercials). Els desenvolupadors de Spring proporcionen mètriques mitjançant Spring Boot Actuator i Micrometer. Al seu torn, Quarkus utilitza MicroProfile Metrics per proporcionar mètriques de referència (JVM i sistema operatiu), mètriques de proveïdors (Quarkus) i mètriques d'aplicacions. MicroProfile Metrics requereix que la implementació admeti els formats de sortida JSON i OpenMetrics (Prometheus). A la taula 7 es donen exemples d'ús de l'API de mètriques de MicroProfile.
В
Taula 7. Exemples d'ús de les API de mètriques de MicroProfile.
Característiques de mètriques de microprofil
Descripció
Примеры
@Comptat
Indica un comptador que compta el nombre de vegades que s'ha cridat un objecte anotat
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Indica un indicador que compta el nombre de trucades concurrents a un objecte anotat
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gauge
Indica un sensor de mesura que mesura el valor d'un objecte anotat
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@mesurat
Indica un sensor de mesura que supervisa la freqüència de trucada d'un objecte anotat
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Una anotació que conté informació sobre metadades quan es rep una sol·licitud per introduir o produir una mètrica
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Indica un temporitzador que fa un seguiment de la durada d'un objecte anotat
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Punts finals de mètriques
Mètriques de l'aplicació
Mètriques bàsiques
Mètriques de proveïdors
Totes les mètriques
Client Rest de MicroProfile
Els microserveis sovint proporcionen punts finals RESTful que requereixen les API de client corresponents per treballar-hi. Per utilitzar els punts finals RESTful, els desenvolupadors de Spring solen utilitzar RestTemplate. Quarkus ofereix API MicroProfile Rest Client per resoldre aquest problema, a la taula 8 es donen exemples d'ús.
В
Taula 8. Exemples d'ús de les API de client MicroProfile Rest.
Característiques del client MicroProfile Rest
Descripció
Примеры
@RegisterRestClient
Registra una interfície Java escrita com a client REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Marca la implementació d'una instància d'una interfície de client REST escrita
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Invocació
Crida a un punt final REST
System.out.println(
restClient.getSalutation());
mp-rest/url
Especifica el punt final REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Resultats de
En aquest bloc, adreçat principalment als desenvolupadors de Spring, hem fet una ullada ràpida a com utilitzar les API Spring amb les API MicroProfile a Quarkus per desenvolupar microserveis Java i després compilar-los en codi binari natiu que estalvia centenars de megabytes de RAM i es llança en qüestió de mil·lisegons.
Com ja heu entès, podeu trobar més informació sobre el suport per a les API Spring i MicroProfile, així com molta altra informació útil, a
Font: www.habr.com