Mar a bhios Quarkus a’ cothlamadh MicroProfile agus Spring

Halo a h-uile duine, seo an treas post san t-sreath Quarkus!

Mar a bhios Quarkus a’ cothlamadh MicroProfile agus Spring

Nuair a bhios tu a’ leasachadh microservices Java, thathas gu tric a’ creidsinn sin Eclipse microprofile и Boot earraich nan APIan fa leth agus neo-eisimeileach. Gu gnàthach, bidh luchd-prògramaidh buailteach a bhith a’ cleachdadh na APIan ris a bheil iad cleachdte mu thràth, leis gu bheil ionnsachadh frèaman ùra agus co-phàirtean runtime a’ toirt tòrr ùine. An-diugh feuchaidh sinn ri leasachadh cuid mòr-chòrdte a dhèanamh nas sìmplidhe MicroProfile API airson luchd-leasachaidh an Earraich agus a’ sealltainn dhut mar a chleachdas tu an Spring API agus feartan feumail ùra aig an aon àm Cuarcus.

Ann am beagan nas mionaidiche, bheir sinn sùil an-toiseach air farsaingeachd agus mion-fhiosrachadh air mar a tha Quarkus a’ toirt taic do Spring APIs gus sealltainn do luchd-leasachaidh an Earraich mar a chleachdas iad an MicroProfile API nan obair làitheil. An uairsin còmhdaichidh sinn na MicroProfile APIs, a tha feumail do luchd-leasachaidh an Earraich nuair a bhios iad a’ cruthachadh microservices.

Carson a tha Quarkus? An toiseach, is e còdadh beò a tha seo, is e sin, ath-luchdachadh gu fèin-ghluasadach air atharrachaidhean sam bith anns an MicroProfile API, Spring API agus Java API eile, a thèid a dhèanamh le dìreach aon àithne: mvn quarkus: dev. San dara h-àite, beachdachadh ann an anns an eisimpleir againn bidh an t-seirbheis Pearsa (a bhios a’ cruinneachadh bho Spring, MicroProfile, agus JPA APIs a-steach gu binary a’ cleachdadh an ìomhaigh dhùthchasach GraalVM) a’ tòiseachadh ann an dìreach 0.055 diogan agus a’ toirt suas mu 90 MB de RAM (RSS) air ceann-uidhe an tagraidh RESTful. A bharrachd air an sin, tha an cruinneachadh aige fhèin air a dhèanamh le dìreach aon àithne: mvn package -Pnative.

Cha tèid sinn a-steach gu mion-fhiosrachadh mu MicroProfile, ach a-mhàin gus luchd-leasachaidh an Earraich a chuideachadh a’ tuigsinn mar as urrainn dhaibh Spring APIs a chleachdadh le APIan MicroProfile ann an Quarkus.

Containers agus Kubernetes

Gus an artaigil seo a chumail sìmplidh, cha bhith sinn a’ còmhdach ach na taobhan àrd-ìre de thaic an seo. Kubernetes, oir tha e cudromach tuigsinn. Tha Quarkus air a shuidheachadh mar stac Java airson Kubernetes, tha e air a dhealbhadh gus caitheamh cuimhne agus ùine tòiseachaidh de thagraidhean agus seirbheisean Java a lughdachadh, agus, mar thoradh air an sin, an dùmhlachd air an òstair àrdachadh agus cosgaisean iomlan a lughdachadh.

Quarkus cuideachd a’ toirt taic do ghineadh fèin-ghluasadach Goireasan agus tairgsean Kubernetes iùil airson a chleachdadh air àrd-ùrlaran Kubernetes agus Red Hat OpenShift. A bharrachd air an sin, bidh Quarkus gu fèin-ghluasadach a’ gineadh na faidhlichean Dockerfile.jvm (pacadh JVM) agus Dockerfile.native (pacadh binary dùthchasach) a dh’ fheumar gus soithichean a chruthachadh.

Mu dheireadh, le bhith ag amas air Kubernetes mar an àrainneachd cleachdadh targaid, cha bhith Quarkus a’ cleachdadh frèaman Java ann an cùisean far a bheil gnìomhachd coltach ris air a chuir an gnìomh aig ìre àrd-ùrlar Kubernetes fhèin. Tha Clàr 1 a’ toirt seachad mapa den chonaltradh gnìomh eadar Kubernetes agus frèaman àbhaisteach Java a bhios luchd-leasachaidh an Earraich a’ cleachdadh.

Clàr 1. Mapa de chonaltradh gnìomhail eadar frèaman Java agus Kubernetes.

Gnìomh
Boot traidiseanta an earraich
Kubernetes

Lorg seirbheis
Eureka
DNS

Configuration
Spring Cloud Config
Mapaichean rèiteachaidh / dìomhaireachd

Luchdaich cothromachadh
Ribbon (taobh teachdaiche)
Seirbheis, Rianadair Mac-samhail (taobh an fhrithealaiche)

A’ cur ri chèile agus a’ ruith a’ chòd bhon eisimpleir

Anns an artaigil seo tha sinn a 'toirt iomradh pròiseact eisimpleir, far a bheil na APIan Spring and MicroProfile agus eadhon an aon chlas Java air an cleachdadh còmhla. Faodar an còd san eisimpleir seo a chur ri chèile agus a ruith bhon loidhne-àithne, faic am faidhle README.md airson mion-fhiosrachadh.

APIs Spring Framework

Injection eisimeileachd

Tha Quarkus a’ toirt taic do raon de Co-theacsan agus API In-stealladh (CDI). agus APIan In-stealladh eisimeileachd an Earraich (Earrach DI). Ma tha thu ag obair le MicroProfile, Java EE agus Jakarta EE, an uairsin tha thu gu math eòlach air CDI mu thràth. Air an làimh eile, faodaidh luchd-leasachaidh an Earraich an Quarkus Extension airson Spring DI API a chleachdadh gus co-chòrdalachd le Spring DI a choileanadh. Tha eisimpleirean de bhith a’ cleachdadh na APIan Spring DI le taic air an toirt seachad ann an Clàr 2.

В pròiseact bhon eisimpleir againn A’ cleachdadh an dà chuid CDI agus Spring Dependency Injection. Gheibhear tuilleadh fiosrachaidh agus eisimpleirean air a’ chuspair seo anns an stiùireadh Quarkus ris an canar Leabhar-iùil an t-earrach DI.

Clàr 2. Eisimpleirean de bhith a 'cleachdadh APIan Spring DI le taic.

Feartan DI Spring le taic
eisimpleirean

In-stealladh constructor

public PersonSpringController(
   PersonSpringRepository personRepository,  // injected      
   PersonSpringMPService personService) {    // injected
      this.personRepository = personRepository;
      this.personService = personService;
}

In-stealladh achaidh
Autowired
luach

@Autowired
@RestClient
SalutationRestClient salutationRestClient;

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

Bean
@Configuration

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

pàirt

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

seirbheis

@Service
public class MessageProducer {
   @Value("${greeting.message}")
   String message;

   public String getPrefix() {
      return message;
   }
}

Am frèam lìn

Is toil le luchd-cleachdaidh MicroProfile gu bheil Quarkus a’ toirt taic do JAX-RS, MicroProfile Rest Client, JSON-P, agus JSON-B mar am prìomh mhodail prògramadh lìn. Bidh luchd-leasachaidh an earraich toilichte le taic Quarkus o chionn ghoirid airson Spring Web API, gu sònraichte eadar-aghaidh REST. Coltach ri Spring DI, is e prìomh amas taic Spring Web API leigeil le luchd-leasachaidh Spring Web APIs a chleachdadh ann an co-bhonn ri MicroProfile APIs. Tha eisimpleirean air mar a chleachdas tu na APIan Spring Web le taic rim faighinn ann an Clàr 3, agus gheibhear tuilleadh fiosrachaidh agus eisimpleirean air a’ chuspair seo anns an oideachadh Quarkus ris an canar Leabhar-iùil airson an t-earrach a.

Clàr 3. Eisimpleirean de bhith a' cleachdadh APIan Spring Web le taic.

Feartan lìn Earrach le taic
eisimpleirean

@RestController
@RequestMapping

@RestController
@RequestMapping("/person")
public class PersonSpringController {
   ...
   ...
   ...
}

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@Iarrtas Param
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@Làmhair eisgeachd
@RestControllerAdvice (pàirt)

@GetMapping(path = "/greet/{id}",
   produces = "text/plain")
   public String greetPerson(
   @PathVariable(name = "id") long id) {
   ...
   ...
   ...
}

Dàta an Earraich JPA

Tuigidh luchd-cleachdaidh MicroProfile cuideachd gu bheil Quarkus a’ toirt taic do JPA a’ cleachdadh an Hibernate ORM. Tha deagh naidheachd ann cuideachd do luchd-leasachaidh an Earraich: tha Quarkus a’ toirt taic do notaichean agus seòrsachan cumanta Spring Data JPA. Tha eisimpleirean de bhith a’ cleachdadh na APIan Spring Data JPA le taic air an toirt seachad ann an Clàr 4.
В pròiseact bhon eisimpleir againn Thathas a’ cleachdadh APIan Spring Data JPA agus tha tuilleadh fiosrachaidh ri fhaighinn anns an oideachadh Quarkus ris an canar Stiùireadh JPA Dàta Earraich.

Clàr 4. Eisimpleirean de bhith a' cleachdadh APIan JPA Data Spring le taic.

Feartan JPA Dàta Earrach le taic
eisimpleirean

Stòr-tasgaidh Crud

public interface PersonRepository
         extends JpaRepository,
                 PersonFragment {
   ...
}

Stòrlann
JpaRepository
Stòras PagingAndSorting

public class PersonRepository extends 

    Repository {

    Person save(Person entity);

    Optional findById(Person entity);
}

Fragannan tasgaidh

public interface PersonRepository
         extends JpaRepository,
                 PersonFragment {
   ...
}

Modhan ceist stèidhichte

public interface PersonRepository extends CrudRepository {

    List findByName(String name);
    
    Person findByNameBySsn(String ssn);
    
    Optional 
       findByNameBySsnIgnoreCase(String ssn);

    Boolean existsBookByYearOfBirthBetween(
            Integer start, Integer end);
}

Ceistean air an sònrachadh leis an neach-cleachdaidh

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

APIan MicroProfile

Fulangas sgàinidh

Tha togail fulangas sgàinidhean glè chudromach airson casg a chuir air fàilligeadh casg agus cruthachadh ailtireachd microservice earbsach. Tha luchd-leasachaidh an earraich air a bhith a’ cleachdadh luchd-brisidh airson fulangas sgàinidhean airson grunn bhliadhnaichean. Hystrix. Ach, chan eil Hystrix air ùrachadh airson ùine mhòr, ach tha MicroProfile's Fault Tolerance a-nis a 'leasachadh gu gnìomhach agus tha grunn bhliadhnaichean de chleachdadh riochdachaidh air a chùlaibh. Mar sin, gus earbsachd sheirbheisean ann an Quarkus a leasachadh, thathas a’ moladh na APIan MicroProfile Fault Tolerance a chleachdadh, agus tha eisimpleirean dhiubh sin air an cleachdadh ann an Clàr 5. Airson tuilleadh fiosrachaidh mu dheidhinn seo, faic leabhar-làimhe Quarkus Stiùireadh airson fulangas sgàinidhean.

Clàr 5. Eisimpleirean de bhith a’ cleachdadh APIan MicroProfile Fault Tolerance le taic.

Feartan fulangas sgàineadh MicroProfile
Tuairisgeul
eisimpleirean

@asyncronach

Cur an gnìomh loidsig ann an snàithlean fa leth

@Asynchronous
@Retry
public Future<String> getSalutation() {
   ...
   return future;
}

@Bulkhead

Cuir crìoch air an àireamh de dh'iarrtasan aig an aon àm

@Bulkhead(5)
public void fiveConcurrent() {
   makeRemoteCall(); //...
}

@CircuitBreaker

Làimhseachadh fàilligeadh glic agus faighinn seachad air fàilligidhean

@CircuitBreaker(delay=500   // milliseconds
   failureRatio = .75,
   requestVolumeThreshold = 20,
   successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
   makeRemoteCall(); //...
}

@Tuiteam air ais

A 'gairm loidsig eile ma dh'fhàilligeas

@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
   makeRemoteCall(); //...
}

public String fallback() {
   return "hello";
}

Retry

Feuch a-rithist ma dh’ fhàillig iarrtas

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

A 'gabhail fois

Ùine smachd air dìth

@Timeout(value = 500 )   // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
   makeRemoteCall(); //...
}

Seirbheisean sgrùdaidh (Seirbheis Slàinte)

Bidh àrd-ùrlaran Kubernetes a’ cumail sùil air slàinte shoithichean a’ cleachdadh seirbheisean sònraichte. Gus leigeil leis an àrd-ùrlar bunaiteach sùil a chumail air seirbheisean, mar as trice bidh luchd-leasachaidh an Earraich a’ cleachdadh HealthIndicator àbhaisteach agus Spring Boot Actuator. Ann an Quarkus, faodar seo a dhèanamh le bhith a’ cleachdadh MicroProfile Health, a bhios gu gnàthach a’ dèanamh sgrùdadh beòthalachd, ach faodar a rèiteachadh gus sùil a thoirt air beòthalachd agus deisealachd aig an aon àm. Tha eisimpleirean de mar a chleachdas tu na APIan MicroProfile Health le taic rim faighinn ann an Clàr 6, agus tha fiosrachadh a bharrachd air a thoirt seachad ann an leabhar-làimhe Quarkus Stiùireadh Slàinte.

Clàr 6: Eisimpleirean cleachdaidh de APIan MicroProfile Health le taic.

Feartan slàinte MicroProfile
Tuairisgeul
eisimpleirean

@beòthalachd

Bidh an àrd-ùrlar ag ath-thòiseachadh thagraidhean soithich a dh’ fhàillig
Ceann-uidhe:
aoigheachd: 8080 / slàinte / beò

@Liveness
public class MyHC implements HealthCheck {
  public HealthCheckResponse call() {

   ...
   return HealthCheckResponse
     .named("myHCProbe")
     .status(ready ? true:false)
     .withData("mydata", data)
     .build();  
}

@readness

Cha chuir an àrd-ùrlar trafaic gu tagraidhean gleidhidh mura h-eil e deiseil
Ceann-uidhe:
aoigheachd: 8080 / slàinte / deiseil

@Readiness
public class MyHC implements HealthCheck {
  public HealthCheckResponse call() {

   ...
   return HealthCheckResponse
     .named("myHCProbe")
     .status(live ? true:false)
     .withData("mydata", data)
     .build();  
}

Meatrics

Bidh tagraidhean a’ toirt seachad meatrach airson adhbharan obrachaidh (gus sùil a chumail air SLAn dèanadais) no adhbharan neo-ghnìomhach (SLAn gnìomhachais). Bidh luchd-leasachaidh an earraich a’ toirt seachad meatrach a’ cleachdadh Spring Boot Actuator agus Micrometer. An uair sin, bidh Quarkus a’ cleachdadh MicroProfile Metrics gus meatrach bun-loidhne (JVM agus siostam obrachaidh), metrics reiceadair (Quarkus), agus metrics tagraidh a thoirt seachad. Tha MicroProfile Metrics ag iarraidh gum bi am buileachadh a’ toirt taic do chruthan toraidh JSON agus OpenMetrics (Prometheus). Tha eisimpleirean de bhith a’ cleachdadh an MicroProfile Metrics API air an toirt seachad ann an Clàr 7.

В pròiseact bhon eisimpleir againn Bithear a’ cleachdadh MicroProfile Metrics gus metrics tagraidh a thoirt seachad. Airson tuilleadh fiosrachaidh, faic leabhar-làimhe Quarkus Stiùireadh Metrics.

Clàr 7. Eisimpleirean de bhith a 'cleachdadh MicroProfile Metrics APIs.

Feartan MicroProfile Metrics
Tuairisgeul
eisimpleirean

@Cunntadh

A’ comharrachadh cuntair a tha a’ cunntadh na h-uimhir de thursan a chaidh rud le notaichean a ghairm

@Counted(name = "fallbackCounter", 
  displayName = "Fallback Counter", 
  description = "Fallback Counter")
public String salutationFallback() {
   return fallbackSalutation;
}

@ConcurrentGauge

A’ comharrachadh slat-tomhais a tha a’ cunntadh an àireamh de ghlaodhan co-aontach gu nì le notaichean

@ConcurrentGuage(
  name = "fallbackConcurrentGauge", 
  displayName="Fallback Concurrent", 
  description="Fallback Concurrent")
public String salutationFallback() {
   return fallbackSalutation;
}

@Gabhadh

A’ comharrachadh sensor tomhais a bhios a’ tomhas luach nì le notaichean

@Metered(name = "FallbackGauge",
   displayName="Fallback Gauge",
   description="Fallback frequency")
public String salutationFallback() {
   return fallbackSalutation;
}

@meadhanach

A’ comharrachadh sensor meatair a bhios a’ cumail sùil air tricead gairm nì le notaichean

@Metered(name = "MeteredFallback",
   displayName="Metered Fallback",
   description="Fallback frequency")
public String salutationFallback() {
   return fallbackSalutation;
}

Metric

Nota anns a bheil fiosrachadh mu mheata-dàta nuair a gheibhear iarrtas airson meatrach a chur a-steach no a thoirt gu buil

@Metric
@Metered(name = "MeteredFallback",
   displayName="Metered Fallback",
   description="Fallback frequency")
public String salutationFallback() {
   return fallbackSalutation;
}

Timed

A’ comharrachadh timer a bhios a’ cumail sùil air fad nì le notaichean

@Timed(name = "TimedFallback",
   displayName="Timed Fallback",
   description="Fallback delay")
public String salutationFallback() {
   return fallbackSalutation;
}

Puingean crìochnachaidh metrics

Meudan tagraidh localhost:8080/metrics/tagradh
Meudan bunaiteach localhost:8080/metrics/bonn
Meatairean reiceadair localhost:8080/metrics/reiceadair
A h-uile metrics localhost:8080 / meatrach

Neach-dèiligidh Rest MicroProfile

Bidh microservices gu tric a’ toirt seachad puingean crìochnachaidh RESTful a dh’ fheumas APIan teachdaiche co-fhreagarrach obrachadh leotha. Gus puingean crìochnachaidh RESTful a chleachdadh, mar as trice bidh luchd-leasachaidh an earraich a’ cleachdadh RestTemplate. Bidh Quarkus a’ tabhann MicroProfile Rest Client APIs gus an duilgheadas seo fhuasgladh, agus tha eisimpleirean de chleachdadh air an toirt seachad ann an Clàr 8.

В pròiseact bhon eisimpleir againn tha cleachdadh puingean crìochnachaidh RESTful air a dhèanamh a’ cleachdadh an MicroProfile Rest Client. Gheibhear tuilleadh fiosrachaidh agus eisimpleirean air a’ chuspair seo ann an leabhar-làimhe Quarkus Stiùireadh Cliant Rest.

Clàr 8. Eisimpleirean de bhith a 'cleachdadh MicroProfile Rest Client APIs.

Feartan neach-dèiligidh MicroProfile Rest
Tuairisgeul
eisimpleirean

@RegisterRestClient

A’ clàradh eadar-aghaidh clò-sgrìobhte Java mar neach-dèiligidh REST

@RegisterRestClient
@Path("/")
public interface MyRestClient {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getSalutation();
}

@RestClient

A’ comharrachadh buileachadh eisimpleir de eadar-aghaidh teachdaiche REST clò-bhuailte

@Autowired // or @Inject
@RestClient
MyRestClient restClient;

Gabhail a-steach

A’ gairm puing crìochnachaidh REST

System.out.println(
   restClient.getSalutation());

mp-fois/url

Sònraich puing crìochnachaidh REST

application.properties:
org.example.MyRestClient/mp-rest/url=
   http://localhost:8081/myendpoint

Builean

Anns a’ bhlog seo, ag amas gu sònraichte air luchd-leasachaidh an Earraich, thug sinn sùil aithghearr air mar a chleachdas sinn Spring APIs leis na MicroProfile APIs ann an Quarkus gus microservices Java a leasachadh agus an uairsin gan cur ri chèile ann an còd binary dùthchasach a shàbhalas ceudan de mhegabytes de RAM agus a chuir air bhog a-steach. cùis milliseconds.

Mar a thuig thu mu thràth, gheibhear barrachd fiosrachaidh mu thaic airson API Spring and MicroProfile, a bharrachd air tòrr fiosrachaidh feumail eile, ann an Leabhar quarkus.

Source: www.habr.com

Cuir beachd ann