Salama daholo, ity ny lahatsoratra fahatelo amin'ny andiany Quarkus!
Rehefa manamboatra microservices Java dia matetika no inoana fa
Amin'ny antsipiriany bebe kokoa, hojerentsika aloha ny sehatra sy ny antsipirian'ny fomba fanohanan'i Quarkus ny Spring APIs mba hampisehoana ny mpamorona Lohataona ny fomba fampiasana ny MicroProfile API amin'ny asany andavanandro. Avy eo isika dia hanarona ny MicroProfile APIs, izay mahasoa ho an'ny mpamorona Lohataona rehefa mamorona microservices.
Nahoana no Quarkus? Voalohany indrindra, ity dia coding mivantana, izany hoe, famerenana mandeha ho azy ny fanovana rehetra ao amin'ny MicroProfile API, Spring API ary Java API hafa, izay atao amin'ny baiko tokana: mvn quarkus:dev. Faharoa, dinihina ao
Tsy hiditra amin'ny antsipiriany momba ny MicroProfile izahay, ankoatra ny fanampiana ireo mpamorona Lohataona hahatakatra ny fomba ahafahan'izy ireo mampiasa Spring API miaraka amin'ny MicroProfile API ao Quarkus.
Container sy Kubernetes
Mba hitazonana ity lahatsoratra ity ho tsotra dia ny lafiny avo lenta amin'ny fanohanana ihany no horesahinay eto.
Quarkus koa
Farany, amin'ny alàlan'ny fifantohana amin'ny Kubernetes ho toy ny tontolon'ny fametrahana tanjona, tsy mampiasa rafitra Java i Quarkus amin'ny toe-javatra misy ny fiasa mitovy amin'izany eo amin'ny sehatry ny sehatra Kubernetes. Ny tabilao 1 dia manome sari-tany momba ny fifandraisan'ny Kubernetes sy ny rafitra Java mahazatra ampiasain'ny mpamorona Lohataona.
Tabilao 1. Sarintanin'ny fifandraisan'ny rafitra Java sy Kubernetes.
Functional
Boot Lohataona nentim-paharazana
Kubernetes
Fahitana serivisy
Eureka
DNS
Configuration
Lohataona Cloud Config
Config Maps/Secrets
Fandanjana entana
Ribbon (lafin'ny mpanjifa)
Serivisy, Mpandrindra ny Replication (lafin'ny mpizara)
Manangona sy mampandeha ny code avy amin'ny ohatra
Ato amin'ity lahatsoratra ity isika dia miresaka
Spring Framework APIs
Tsindrona fiankinan-doha
Quarkus dia manohana karazana
В
Tabilao 2. Ohatra amin'ny fampiasana ny Spring DI API tohana.
Supported Spring DI Features
ohatra
Constructor tsindrona
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Field tsindrona
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Configuration
@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 framework
Ireo mpampiasa MicroProfile dia ho tia fa i Quarkus dia manohana ny JAX-RS, MicroProfile Rest Client, JSON-P, ary JSON-B ho modely fandaharana amin'ny tranonkala voalohany. Ny mpamorona lohataona dia ho faly amin'ny fanohanan'i Quarkus vao haingana ho an'ny Spring Web API, indrindra ny fifandraisana REST. Mitovy amin'ny Spring DI, ny tanjon'ny fanohanan'ny Spring Web API dia ny ahafahan'ny mpamorona Lohataona mampiasa ny Spring Web API miaraka amin'ny MicroProfile API. Ohatra amin'ny fampiasana ny API Web Lohataona tohana dia omena ao amin'ny tabilao 3, ary misy fampahalalana bebe kokoa sy ohatra momba ity lohahevitra ity dia hita ao amin'ny fampianarana Quarkus antsoina hoe
Tabilao 3. Ohatra amin'ny fampiasana ny Spring Web API tohana.
Fanohanana Lohataona Web Features
ohatra
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (ampahany)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Takelaka data JPA
Ireo mpampiasa MicroProfile dia hankasitraka ihany koa fa manohana ny JPA i Quarkus amin'ny fampiasana ny ORM Hibernate. Misy vaovao tsara ihany koa ho an'ny mpamorona Lohataona: Quarkus dia manohana ireo fanamarihana sy karazana JPA Spring Data mahazatra. Ny ohatra amin'ny fampiasana ny Spring Data JPA API tohana dia omena ao amin'ny tabilao 4.
В
Table 4. Ohatra amin'ny fampiasana ny Spring Data JPA APIs.
Ireo endri-javatra JPA Lohataona
ohatra
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
repository
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Repository Fragments
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Fomba fangataham-panontaniana
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Fanontaniana voafaritry ny mpampiasa
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
Fandeferana fahadisoana
Ny fananganana fandeferana diso dia tena ilaina amin'ny fisorohana ny tsy fahombiazan'ny cascading sy ny famoronana maritrano microservice azo antoka. Ny mpanamboatra lohataona dia nampiasa tsipika fitetezana ho an'ny fandeferana diso nandritra ny taona maro.
Table 5. Ohatra amin'ny fampiasana ny MicroProfile Fault Tolerance APIs.
MicroProfile Fault Tolerance Features
famaritana
ohatra
@asynchronous
Manatanteraka lojika amin'ny kofehy misaraka
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Fero ny isan'ny fangatahana miaraka
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Fikarakarana tsy fahombiazana Smart sy fanarenana amin'ny tsy fahombiazana
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Hianjera indray
Miantso lojika hafa raha sendra tsy fahombiazana
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Andramo indray raha tsy nahomby ny fangatahana
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Ny fe-potoana fanaraha-maso tsy fahombiazana
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Serivisy fanamarinana (Service Health)
Manara-maso ny fahasalaman'ny kaontenera mampiasa tolotra manokana ny sehatra Kubernetes. Mba hamelana ny sehatra fototra hanara-maso ny serivisy, ny mpamorona Lohataona dia matetika mampiasa HealthIndicator manokana sy Spring Boot Actuator. Ao amin'ny Quarkus, azo atao izany amin'ny alàlan'ny MicroProfile Health, izay amin'ny alàlan'ny default dia manao fisavana ny fiainana, saingy azo amboarina mba hanamarina ny fahavelomana sy ny fahavononana. Ohatra amin'ny fampiasana ny MicroProfile Health API tohana dia omena ao amin'ny tabilao 6, ary misy fampahalalana fanampiny omena ao amin'ny boky Quarkus
Tabilao 6: Ohatra fampiasana ny MicroProfile Health API tohana.
MicroProfile Health endri-javatra
famaritana
ohatra
@fiainana
Ny famerenan'ny sehatra dia tsy nahomby ny fampiharana voatahiry
teboka farany:
mpampiantrano: 8080/health/live
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@ fahavononana
Ny sehatra dia tsy handefa fifamoivoizana amin'ny fampiharana container raha tsy vonona
teboka farany:
mpampiantrano: 8080 / fahasalamana / vonona
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
mari-pandrefesana
Ny fampiharana dia manome mari-pamantarana ho an'ny tanjona ampiasana (hanaraha-maso ny SLA fampiasa) na tanjona tsy ampiasana (SLA orinasa). Ny mpamorona lohataona dia manome metrika amin'ny fampiasana Spring Boot Actuator sy Micrometer. Ho setrin'izany, mampiasa MicroProfile Metrics i Quarkus mba hanomezana mari-pamantarana fototra (JVM sy rafitra fiasana), metrika mpivarotra (Quarkus), ary metrika fampiharana. Ny MicroProfile Metrics dia mitaky fa ny fampiharana dia manohana ny endrika famoahana JSON sy OpenMetrics (Prometheus). Ohatra amin'ny fampiasana ny MicroProfile Metrics API dia omena ao amin'ny tabilao 7.
В
Tabilao 7. Ohatra amin'ny fampiasana MicroProfile Metrics API.
MicroProfile Metrics Features
famaritana
ohatra
@voaisa
Enti-milaza counter counter izay manisa ny isan'ny niantsoana zavatra misy annotate
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Manondro fandrefesana manisa ny isan'ny antso miaraka amin'ny zavatra voamarika
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gauge
Manondro fandrefesana fandrefesana ny sandan'ny zavatra voamarika
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Manondro sensor metatra manara-maso ny faharetan'ny antso amin'ny zavatra voamarika
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Annotation misy fampahafantarana momba ny metadata rehefa voaray ny fangatahana hiditra na hamokatra metrika
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Manondro fameram-potoana izay manara-maso ny faharetan'ny zavatra voamarika
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Metrics Endpoints
Metrika fampiharana
Metrika fototra
Metrika mpivarotra
Ny metrika rehetra
MicroProfile Rest Client
Matetika ny microservices dia manome teboka farany RESTful izay mitaky API mpanjifa mifanaraka amin'izany. Mba hampiasana ireo teboka farany RESTful dia matetika mampiasa RestTemplate ny mpamorona lohataona. Quarkus dia manolotra MicroProfile Rest Client APIs hamahana ity olana ity, ohatra amin'ny fampiasana azy ireo dia omena ao amin'ny Table 8.
В
Table 8. Ohatra amin'ny fampiasana MicroProfile Rest Client APIs.
MicroProfile Rest Client Features
famaritana
ohatra
@RegisterRestClient
Misoratra anarana interface tsara Java ho mpanjifa REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Manamarika ny fampiharana ny ohatra iray amin'ny interface client REST voatendry
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Vavaka Fanombohana
Miantso teboka farany REST
System.out.println(
restClient.getSalutation());
mp-rest/url
Manondro ny teboka farany REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
vokatra
Ao amin'ity bilaogy ity, izay mikendry indrindra ho an'ny mpamorona Lohataona, dia nijery haingana ny fomba fampiasana ny Spring APIs miaraka amin'ny MicroProfile API ao Quarkus mba hamolavola microservices Java ary avy eo manangona azy ireo ho code binary teratany izay mitahiry megabytes RAM an-jatony ary manomboka amin'ny resaka milisegondra.
Araka ny efa azonao dia misy fampahalalana bebe kokoa momba ny fanohanana ny Spring and MicroProfile APIs, ary koa ny fampahalalana mahasoa hafa, dia hita ao amin'ny
Source: www.habr.com