Ahoana no nampifangaroan'i Quarkus ny MicroProfile sy ny lohataona

Salama daholo, ity ny lahatsoratra fahatelo amin'ny andiany Quarkus!

Ahoana no nampifangaroan'i Quarkus ny MicroProfile sy ny lohataona

Rehefa manamboatra microservices Java dia matetika no inoana fa Eclipse MicroProfile и Bootin'ny lohataona dia API misaraka sy tsy miankina. Amin'ny alàlan'ny default, ny mpandrindra programa dia matetika mampiasa ny API efa nahazatra azy ireo, satria mila fotoana be ny fianarana rafitra vaovao sy singa fampandehanana. Androany isika dia hiezaka ny hanatsotra ny fivoaran'ny malaza sasany MicroProfile API ho an'ny mpamorona Lohataona ary asehoy anao ny fomba fampiasana miaraka amin'ny Spring API sy ireo endri-javatra mahasoa vaovao quarkus.

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 amin’ny ohatra ataontsika ny serivisy Person (izay manangona avy amin'ny Spring, MicroProfile, ary JPA APIs ho lasa binary mampiasa ny sary GraalVM teratany) dia manomboka ao anatin'ny 0.055 segondra fotsiny ary maka 90 MB RAM (RSS) eo amin'ny teboka farany fampiharana RESTful. Ankoatr'izay, ny fanangonana azy dia atao amin'ny baiko iray ihany: mvn package -Pnative.

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. Kubernetes, satria zava-dehibe ny mahatakatra. Quarkus dia napetraka ho stack Java ho an'ny Kubernetes, natao hanamaivanana ny fanjifana fahatsiarovana sy ny fotoana fanombohana ny fampiharana sy serivisy Java, ary vokatr'izany dia mampitombo ny hakitroky ny mpampiantrano ary mampihena ny vidiny amin'ny ankapobeny.

Quarkus koa manohana ny famokarana fiara Loharano sy tolotra Kubernetes mpitari-dalana ho fametrahana amin'ny sehatra Kubernetes sy Red Hat OpenShift. Ho fanampin'izany, i Quarkus dia mamorona ho azy ny Dockerfile.jvm (package JVM) sy Dockerfile.native (native binary packaging) ilaina mba hamoronana container.

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 tetikasa ohatra, izay ahitana ny Spring sy MicroProfile API ary na dia ny kilasy Java mitovy aza no ampiasaina miaraka. Ny kaody amin'ity ohatra ity dia azo atambatra ary mihazakazaka avy amin'ny baikon'ny baiko, jereo ny rakitra README.md ho an'ny antsipiriany.

Spring Framework APIs

Tsindrona fiankinan-doha

Quarkus dia manohana karazana Contexts and Dependency Injections (CDI) API ary ny Spring Dependency Injections (Spring DI) API. Raha miasa amin'ny MicroProfile ianao, Java EE sy Jakarta EE, dia efa tena zatra CDI ianao. Amin'ny lafiny iray, ny mpamorona Lohataona dia afaka mampiasa ny Quarkus Extension ho an'ny Spring DI API mba hahazoana mifanaraka amin'ny Spring DI. Ohatra amin'ny fampiasana ny Spring DI API tohana dia omena ao amin'ny tabilao 2.

В tetikasa avy amin'ny ohatra asehontsika Mampiasa CDI sy Lohataona Dependency Injections. Raha mila fanazavana fanampiny sy ohatra momba ity lohahevitra ity dia jereo ny torolàlana Quarkus antsoina Lohataona DI Guide.

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
sarobidy

@Autowired
@RestClient
SalutationRestClient salutationRestClient;

@Value("${fallbackSalutation}")
String fallbackSalutation;

Bean
@Configuration

@Configuration
public class AppConfiguration {
   @Bean(name = "capitalizeFunction")
   public StringFunction capitalizer() {
      return String::toUpperCase;
   }
}

singa

@Component("noopFunction")
public class NoOpSingleStringFunction implements StringFunction {
   @Override
   public String apply(String s) {
      return s;
   }
}

Service

@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 Lohataona Web Guide.

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.
В tetikasa avy amin'ny ohatra asehontsika Ny Spring Data JPA API dia ampiasaina ary misy fampahalalana bebe kokoa hita ao amin'ny fampianarana Quarkus antsoina Lohataona Data JPA Guide.

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. Hystrix. Na izany aza, Hystrix dia tsy nohavaozina hatry ny ela, fa ny MicroProfile's Fault Tolerance izao dia mivoatra mavitrika ary efa taona maro no nampiasana ny famokarana azy. Noho izany, mba hanatsarana ny fahamendrehan'ny serivisy ao amin'ny Quarkus, dia soso-kevitra ny hampiasa ny MicroProfile Fault Tolerance APIs, ohatra izay ampiasaina ao amin'ny tabilao 5. Raha mila fanazavana fanampiny momba izany dia jereo ny boky Quarkus Torolàlana momba ny fandeferana diso.

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";
}

Hanandrana indray

Andramo indray raha tsy nahomby ny fangatahana

@Retry(maxRetries=3)
public String getSalutation() {
   makeRemoteCall(); //...
}

Fotoana dila

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 Torolàlana ara-pahasalamana.

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.

В tetikasa avy amin'ny ohatra asehontsika MicroProfile Metrics dia ampiasaina hanomezana metrika fampiharana. Raha mila fanazavana fanampiny dia jereo ny boky fampianarana Quarkus Torolàlana metrika.

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;
}

mimetatra

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;
}

ara-potoana

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 localhost:8080/metrics/application
Metrika fototra localhost: 8080/metatra/base
Metrika mpivarotra localhost:8080/metrics/vendor
Ny metrika rehetra localhost:8080/metatra

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.

В tetikasa avy amin'ny ohatra asehontsika ny fampiasana ny teboka farany RESTful dia atao amin'ny alàlan'ny MicroProfile Rest Client. Ny fampahalalana bebe kokoa sy ny ohatra momba ity lohahevitra ity dia azo jerena ao amin'ny boky fampianarana Quarkus Torolàlana ho an'ny mpanjifa miala sasatra.

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 Quarkus manuals.

Source: www.habr.com

Add a comment