Kaixo guztioi, hona hemen Quarkus serieko hirugarren mezua!
Java mikrozerbitzuak garatzean, askotan hori uste da
Xehetasun apur bat gehiagorekin, lehenik eta behin Quarkus-ek Spring APIak onartzen dituen esparrua eta xehetasunak aztertuko ditugu Spring garatzaileei MicroProfile APIa eguneroko lanean nola erabili erakusteko. Ondoren, MicroProfile APIak landuko ditugu, Spring garatzaileentzat erabilgarriak diren mikrozerbitzuak sortzerakoan.
Zergatik Quarkus? Lehenik eta behin, zuzeneko kodeketa da, hau da, MicroProfile APIan, Spring APIan eta beste Java APIetan egindako aldaketak automatikoki birkargatzea, komando bakarrarekin egiten dena: mvn quarkus:dev. Bigarrenik, kontuan hartuta
Ez dugu MicroProfileri buruzko xehetasunetan sartuko, Spring garatzaileei Spring APIak Quarkus-en MicroProfile APIekin nola erabil ditzaketen ulertzeaz gain.
Ontziak eta Kubernetes
Artikulu hau sinplea izan dadin, laguntzaren goi-mailako alderdiak bakarrik landuko ditugu hemen.
Quarkus ere
Azkenik, Kubernetes helburu hedatzeko ingurune gisa zentratuz, Quarkusek ez ditu Java esparruak erabiltzen Kubernetes plataformaren mailan antzeko funtzionalitateak ezartzen diren kasuetan. 1. taulak Spring garatzaileek erabiltzen dituzten Kubernetes eta Java esparru tipikoen arteko korrespondentzia funtzionalaren mapa eskaintzen du.
1. taula. Java frameworken eta Kubernetesen arteko korrespondentzia funtzionalaren mapa.
funtzionala
Udaberriko bota tradizionala
Kubernetes
Zerbitzuaren aurkikuntza
Eureka
DNS
Konfigurazioa
Spring Cloud konfigurazioa
Konfiguratu Mapak/Sekretuak
Karga orekatzea
Zinta (bezeroaren aldean)
Zerbitzua, Erreplikazio-kontrolatzailea (zerbitzariaren aldean)
Adibideko kodea konpilatu eta exekutatzea
Artikulu honetan aipatzen dugu
Spring Framework APIak
Mendekotasun Injekzioa
Quarkus-ek sorta bat onartzen du
Π
2. taula. Onartutako Spring DI APIak erabiltzeko adibideak.
Onartutako Spring DI Ezaugarriak
ΠΡΠΈΠΌΠ΅ΡΡ
Eraikitzaile Injekzioa
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Eremu Injekzioa
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Konfigurazioa
@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 esparrua
MicroProfile erabiltzaileek Quarkus-ek JAX-RS, MicroProfile Rest Client, JSON-P eta JSON-B onartzen dituela web programazio-eredu nagusi gisa. Spring garatzaileak pozik egongo dira Quarkusek Spring Web APIrako azken laguntzarekin, bereziki REST interfazeekin. Spring DIren antzera, Spring Web API laguntzaren helburu nagusia Spring garatzaileek Spring Web APIak MicroProfile APIekin batera erabiltzeko aukera ematea da. Onartutako Spring Web APIak erabiltzeko adibideak 3. taulan ematen dira, eta gai honi buruzko informazio eta adibide gehiago Quarkus izeneko tutorialean aurki daitezke.
3. taula. Onartutako Spring Web APIak erabiltzeko adibideak.
Onartutako Spring Web Ezaugarriak
ΠΡΠΈΠΌΠ΅ΡΡ
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (partziala)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Spring DataJPA
MicroProfile erabiltzaileek ere eskertuko dute Quarkusek JPA onartzen duela Hibernate ORM erabiliz. Spring garatzaileentzat ere albiste onak daude: Quarkusek Spring Data JPA oharrak eta mota arruntak onartzen ditu. Onartutako Spring Data JPA APIak erabiltzeko adibideak 4. taulan ematen dira.
Π
4. taula. Onartutako Spring Data JPA APIak erabiltzeko adibideak.
Onartutako Spring Data JPA Ezaugarriak
ΠΡΠΈΠΌΠ΅ΡΡ
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Biltegi
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Biltegiko zatiak
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Kontsulta metodo eratorriak
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Erabiltzaileak definitutako kontsultak
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 APIak
Akatsen tolerantzia
Akats-tolerantziaren eraikuntzak oso garrantzitsuak dira kaskadako hutsegiteak saihesteko eta mikrozerbitzuen arkitektura fidagarriak sortzeko. Udaberriko garatzaileek urte asko daramatzate akatsen tolerantziarako etengailuak erabiltzen.
5. taula. Onartutako MicroProfile Fault Tolerance APIak erabiltzeko adibideak.
MikroProfile Akatsen Tolerantzia Ezaugarriak
Description
ΠΡΠΈΠΌΠ΅ΡΡ
@Asinkronoa
Logika aparteko hari batean exekutatzen
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@ Bulkhead
Mugatu aldibereko eskaera kopurua
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Hutsegite adimenduna kudeatzea eta hutsegiteetatik berreskuratzea
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Erori
Porrotaren kasuan logika alternatiboa deitzea
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Saiatu berriro eskaerak huts egiten badu
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Hutsegiteak kontrolatzeko denbora-muga
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Zerbitzuak egiaztatzea (Zerbitzuaren osasuna)
Kubernetes plataformek edukiontzien osasuna kontrolatzen dute zerbitzu bereziak erabiliz. Azpiko plataformak zerbitzuak kontrolatzeko aukera izan dezan, Spring garatzaileek HealthIndicator eta Spring Boot Actuator pertsonalizatuak erabiltzen dituzte normalean. Quarkus-en, MicroProfile Health erabiliz egin daiteke, lehenespenez bizitasun egiaztapena egiten duena, baina aldi berean bizitasuna eta presttasuna egiaztatzeko konfigura daiteke. Onartutako MicroProfile Health APIak erabiltzeko adibideak 6. taulan ematen dira, eta informazio gehigarria Quarkus eskuliburuan.
6. taula: Onartutako MicroProfile Health APIen erabilera-adibideak.
MicroProfile Health ezaugarriak
Description
ΠΡΠΈΠΌΠ΅ΡΡ
@Bizitasuna
Plataformak berrabiarazten ditu edukiontzidun aplikazio hutsak
Amaiera:
ostalaria:8080/health/live
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Prestasuna
Plataformak ez du trafikoa bidaliko edukiontzidun aplikazioetara prest ez badago
Amaiera:
ostalaria:8080/osasuna/prest
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Metrikak
Aplikazioek helburu operatiboetarako (errendimendu-SLA-ak kontrolatzeko) edo helburu ez-operatiboetarako (negozio-SLA-ak) eskaintzen dituzte. Spring garatzaileek neurketak eskaintzen dituzte Spring Boot Actuator eta Mikrometroa erabiliz. Era berean, Quarkusek MicroProfile Metrics erabiltzen du oinarrizko neurriak (JVM eta sistema eragilea), hornitzaileen neurriak (Quarkus) eta aplikazioaren neurriak emateko. MicroProfile Metrics-ek inplementazioak JSON eta OpenMetrics (Prometheus) irteera formatuak onartzen dituela eskatzen du. MicroProfile Metrics APIa erabiltzeko adibideak 7. taulan ematen dira.
Π
7. taula. MicroProfile Metrics APIak erabiltzeko adibideak.
MicroProfile Metrics Ezaugarriak
Description
ΠΡΠΈΠΌΠ΅ΡΡ
@zenbatua
Adierazitako objektu bati zenbat aldiz deitu zaion zenbatzen duen kontagailu bat adierazten du
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Apuntatutako objektu bati aldibereko deiak zenbatzen dituen neurgailu bat adierazten du
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gauge
Apuntatutako objektu baten balioa neurtzen duen neurgailu-sentsore bat adierazten du
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@neurtuta
Apuntatutako objektu baten dei-maiztasuna kontrolatzen duen neurgailu-sentsore bat adierazten du
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Metadatuei buruzko informazioa jasotzen duen oharpena, metrika bat sartzeko edo sortzeko eskaera jasotzen denean
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Apuntatutako objektu baten iraupena kontrolatzen duen tenporizadorea adierazten du
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Metrikak Amaiera-puntuak
Aplikazio-neurriak
Oinarrizko neurketak
Saltzaileen neurketak
Neurri guztiak
MicroProfile Rest Bezeroa
Mikrozerbitzuek sarritan RESTful amaierako puntuak eskaintzen dituzte, dagozkion bezeroen APIak behar dituztenak lan egiteko. RESTful amaierako puntuak erabiltzeko, Springeko garatzaileek RestTemplate erabiltzen dute normalean. Quarkusek MicroProfile Rest Client APIak eskaintzen ditu arazo hau konpontzeko, eta horien erabilera-adibideak 8. taulan ematen dira.
Π
8. taula. MicroProfile Rest Client APIak erabiltzeko adibideak.
MicroProfile Rest Bezeroaren Ezaugarriak
Description
ΠΡΠΈΠΌΠ΅ΡΡ
@RegisterRestClient
Idatzitako Java interfazea REST bezero gisa erregistratzen du
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Idatzitako REST bezero-interfaze baten instantzia baten ezarpena markatzen du
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
deitura
REST amaierako puntu batera deitzen du
System.out.println(
restClient.getSalutation());
mp-rest/url
REST amaiera-puntua zehazten du
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Emaitzak
Spring garatzaileei zuzendutako blog honetan, Spring APIak Quarkus-en MicroProfile APIekin nola erabili aztertu dugu, Java mikrozerbitzuak garatzeko eta, ondoren, ehunka RAM RAM gorde eta abiarazten duen jatorrizko kode bitar batean konpilatu. milisegundoko kontua.
Dagoeneko ulertu zenuenez, Spring eta MicroProfile APIei buruzko euskarriari buruzko informazio gehiago, baita beste informazio baliagarri asko ere, aurki daiteke.
Iturria: www.habr.com