Talofa tagata uma, o le fa'ailoga lona tolu lea i le fa'asologa o Quarkus!
Pe a atiaʻe Java microservices, e masani ona talitonuina
I se fa'amatalaga sili atu, o le a tatou va'ai muamua i le lautele ma fa'amatalaga o le auala e lagolagoina ai e Quarkus Spring APIs e fa'aali atu ai i le au atina'e Spring le fa'aogaina o le MicroProfile API ia latou galuega i lea aso ma lea aso. Ona matou ufiufi lea o MicroProfile APIs, e aoga mo Spring developers pe a fatuina microservices.
Aisea Quarkus? Muamua, o le coding ola lea, o lona uiga, toe faʻapipiʻiina otometi soʻo se suiga i le MicroProfile API, Spring API ma isi Java API, lea e faia i le tasi le poloaiga: mvn quarkus: dev. Lona lua, mafaufau i totonu
O le a matou le faʻamatalaina auiliili e uiga i MicroProfile, e ese mai i le fesoasoani i tagata atiae Spring ia malamalama pe faʻapefea ona latou faʻaogaina Spring API ma MicroProfile API i Quarkus.
Container ma Kubernetes
Ina ia fa'afaigofie lenei tusiga, o le a na'o le tulaga maualuga o le lagolago iinei.
Quarkus foi
Ma le mea mulimuli, e ala i le taulaʻi atu i Kubernetes e avea ma siosiomaga faʻapipiʻiina, e le faʻaogaina e Quarkus ni Java frameworks i mataupu e faʻatino ai galuega tutusa i le tulaga o le Kubernetes platform lava ia. Laulau 1 o loʻo tuʻuina atu ai se faʻafanua o fesoʻotaʻiga faʻatinoga i le va o Kubernetes ma faʻataʻitaʻiga masani Java o loʻo faʻaogaina e tagata atiaʻe Spring.
Laulau 1. Fa'afanua o feso'ota'iga fa'atino i le va o fa'ava'a Java ma Kubernetes.
Faʻamasinoga
Se'e tautotogo masani
Kubernetes
Auaunaga su'esu'e
Eureka
DNS
Configuration
Spring Cloud Config
Config Faafanua/Faalilo
Tau faʻatatau paleni
Lipine (itu o le tagata fa'atau)
Au'aunaga, Pule Fa'aliliuina (itu o le server)
Faʻapipiʻiina ma faʻatautaia le code mai le faʻataʻitaʻiga
I lenei tusiga tatou te faasino i ai
Spring Framework APIs
Tui Faamoemoe
E lagolagoina e Quarkus le tele o
В
Laulau 2. Fa'ata'ita'iga o le fa'aogaina o Spring DI APIs.
Lagolagoina Spring DI Features
faataitaiga
Fauina tui
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Fa'a tui
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Faʻamatalaga
@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;
}
}
Uepi fa'avae
O le a fiafia tagata fa'aoga MicroProfile e lagolagoina e Quarkus le JAX-RS, MicroProfile Rest Client, JSON-P, ma le JSON-B e avea ma fa'ata'ita'iga fa'apolokalame i luga ole laiga. O le a fiafia le au atinaʻe tautotogo i le lagolago lata mai a Quarkus mo le Spring Web API, aemaise lava fesoʻotaʻiga REST. E tutusa ma Spring DI, o le sini autu o le Spring Web API lagolago o le mafai lea e le au atinaʻe Spring ona faʻaoga Spring Web API faʻatasi ma MicroProfile APIs. O faʻataʻitaʻiga o le faʻaogaina o Spring Web APIs o loʻo lagolagoina i le Laulau 3, ma nisi faʻamatalaga ma faʻataʻitaʻiga i lenei autu e mafai ona maua i le Quarkus tutorial e taʻua.
Laulau 3. Fa'ata'ita'iga o le fa'aogaina o Spring Web APIs lagolago.
Lagolagoina Spring Web Features
faataitaiga
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@TalosagaParam
@RequestHeader
@MatrixVariable
@PathVariable
@KukiValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (vaega)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Spring DataJPA
O le a talisapaia foi e tagata faʻaoga MicroProfile e lagolagoina e Quarkus le JPA e faʻaaoga ai le Hibernate ORM. O lo'o iai fo'i tala lelei mo tagata atia'e Tautotogo: E lagolagoina e Quarkus fa'amatalaga masani ma ituaiga o Spring Data JPA. O fa'ata'ita'iga o le fa'aogaina o Spring Data JPA APIs o lo'o lagolagoina i le Laulau 4.
В
Laulau 4. Fa'ata'ita'iga o le fa'aogaina o Spring Data JPA APIs.
Lagolagoina Spring Data JPA Features
faataitaiga
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Faletupe
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Fa'ato'aga Fa'asoa
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Metotia fesili maua'i
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Fesili fa'asinoina e le tagata fa'aoga
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 APIs
Fa'apalepale masei
O faufale fa'apalepale fa'aletonu e taua tele mo le puipuia o fa'aletonu fa'asolo ma le fa'atupuina o fausaga fa'apitoa microservice. O lo'o fa'aogaina e le au atia'e le tautotogo ta'avale ta'avale mo le fa'apalepaleina o fa'aletonu mo le tele o tausaga.
Laulau 5. Fa'ata'ita'iga o le fa'aogaina o le MicroProfile Fault Tolerance API e lagolagoina.
MicroProfile Fault Tolerance Features
faʻamatalaga
faataitaiga
@Asynchronous
Fa'atinoina le fa'atatau i se filo eseese
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Fa'atapula'a le numera o talosaga fa'atasi
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Fa'ata'ita'iga fa'aletonu le taulimaina ma le toe fa'aleleia mai fa'aletonu
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Fallback
Vala'au isi manatu pe a fa'aletonu
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Toe taumafai pe a le manuia talosaga
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Taimi fa'aletonu pulea
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Au'aunaga siaki (Au'aunaga Soifua Maloloina)
Kubernetes platforms e mataʻituina le soifua maloloina o pusa e faʻaaoga ai auaunaga faʻapitoa. Ina ia faʻatagaina le faʻavae autu e mataʻituina auaunaga, e masani ona faʻaogaina e le au atinaʻe Spring se tu masani a le HealthIndicator ma Spring Boot Actuator. I Quarkus, e mafai ona faia lenei mea e faʻaaoga ai le MicroProfile Health, lea e le mafai ona faia se siaki ola, ae mafai ona faʻatulagaina e siaki ai le ola ma le sauni. O faʻataʻitaʻiga o le faʻaogaina o MicroProfile Health API o loʻo lagolagoina o loʻo tuʻuina atu i le Laulau 6, ma faʻamatalaga faaopoopo o loʻo tuʻuina atu i le tusi lesona a Quarkus
Laulau 6: Fa'ata'ita'iga fa'aoga o MicroProfile Health APIs e lagolagoina.
MicroProfile Soifua Maloloina foliga
faʻamatalaga
faataitaiga
@Olaola
Ua le mafai ona toe fa'afou le tulaga fa'apolokalame talosaga
Fa'ai'uga:
talimalo: 8080 / soifua maloloina / ola
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Sauniuni
O le a le tu'uina atu e le fa'asalalauga ta'avale i talosaga fa'apipi'i pe a le o sauni
Fa'ai'uga:
talimalo: 8080 / soifua maloloina / sauni
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Fuafuaga
O talosaga e tu'uina atu fua fa'atatau mo fa'amoemoega fa'agaioiga (e mata'ituina SLA fa'atinoga) po'o fa'amoemoega e le fa'atinoina (sLAs pisinisi). O lo'o tu'uina atu e le au atina'e le tautotogo ni metotia e fa'aaoga ai Spring Boot Actuator ma Micrometer. I le isi itu, e faʻaogaina e Quarkus MicroProfile Metrics e tuʻuina atu ai fua faʻavae (JVM ma le faʻaogaina o le system), faʻatauga faʻatau (Quarkus), ma faʻatatauga talosaga. MicroProfile Metrics e manaʻomia le faʻatinoga e lagolagoina JSON ma OpenMetrics (Prometheus) faʻasologa o galuega. O fa'ata'ita'iga o le fa'aogaina o le MicroProfile Metrics API o lo'o tu'uina atu ile Laulau 7.
В
Laulau 7. Fa'ata'ita'iga o le fa'aogaina o MicroProfile Metrics APIs.
MicroProfile metrics Features
faʻamatalaga
faataitaiga
@faitau
Fa'ailoaina se fata fa'atau e faitau le aofa'i o taimi na vala'au ai se mea fa'amatalaga
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Fa'ailoa se fua e faitau ai le numera o telefoni fa'atasi i se mea fa'ailoa
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@fua
Fa'ailoa se fua fa'atatau e fua ai le tau o se mea fa'amatalaga
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Fa'ailoa se mita fa'amau e mata'ituina le tele o le vala'au o se mea fa'amatalaga
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
O se fa'amatalaga o lo'o iai fa'amatalaga e uiga i metadata pe a maua se talosaga e ulufale pe fa'ailoa mai se metric
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Fa'ailoa mai se taimi e siaki ai le umi o se mea fa'amatalaga
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Su'ega Fa'ai'uga
Fa'atatauga o talosaga
Fuafuaga autu
Fua fa'atau
Fuafuaga uma
MicroProfile Rest Client
Microservices e masani ona tu'uina atu fa'ai'uga malō e mana'omia ai API fa'atatau e galulue ai. Mo le fa'aogaina o fa'ai'uga RESTful, e masani ona fa'aogaina e le au atina'e Spring RestTemplate. Quarkus ofo atu MicroProfile Rest Client APIs e foia ai lenei faʻafitauli, faʻataʻitaʻiga o le faʻaaogaina o loʻo tuʻuina atu i le Laulau 8.
В
Laulau 8. Fa'ata'ita'iga o le fa'aogaina ole MicroProfile Rest Client APIs.
MicroProfile Rest Client Features
faʻamatalaga
faataitaiga
@RegisterRestClient
Lesitalaina se fa'aoga Java lolomi e fai ma tagata fa'atau REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Fa'ailogaina le fa'atinoina o se fa'ata'ita'iga o se fa'aoga a le tagata fa'atau REST
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Faʻasalaga
Ta'u se mea e gata ai le REST
System.out.println(
restClient.getSalutation());
mp-malologa/url
Fa'ama'oti le pito i'uga o le REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
O taunuʻuga
I totonu o lenei blog, e faʻatatau i le Spring developers, na matou vaʻavaʻai vave i le faʻaogaina o Spring API ma MicroProfile APIs i Quarkus e atiaʻe ai Java microservices ona tuʻufaʻatasia lea i totonu o le numera binary code e faʻasaoina ai le faitau selau o megabytes o le RAM ma faʻalauiloa i totonu. se mataupu o milliseconds.
E pei ona e malamalama i ai, o nisi faʻamatalaga e uiga i le lagolago mo Spring ma MicroProfile API, faʻapea foʻi ma le tele o isi faʻamatalaga aoga, e mafai ona maua i totonu.
puna: www.habr.com