Sut mae Quarkus yn cyfuno MicroProfile a Spring

Helo pawb, dyma'r trydydd postiad yn y gyfres Quarkus!

Sut mae Quarkus yn cyfuno MicroProfile a Spring

Wrth ddatblygu microwasanaethau Java, credir yn aml fod MicroProfile Eclipse ΠΈ Cist gwanwyn yn APIs ar wahΓ’n ac annibynnol. Yn ddiofyn, mae rhaglenwyr yn tueddu i ddefnyddio'r APIs y maent eisoes wedi arfer Γ’ nhw, gan fod dysgu fframweithiau newydd a chydrannau amser rhedeg yn cymryd llawer o amser. Heddiw, byddwn yn ceisio symleiddio datblygiad rhai poblogaidd API MicroProfile ar gyfer datblygwyr y Gwanwyn ac yn dangos i chi sut i ddefnyddio API y Gwanwyn a nodweddion defnyddiol newydd ar yr un pryd Cwarcws.

Mewn ychydig mwy manwl, byddwn yn gyntaf yn edrych ar gwmpas a manylion sut mae Quarkus yn cefnogi APIs Gwanwyn i ddangos i ddatblygwyr y Gwanwyn sut i ddefnyddio'r API MicroProfile yn eu gwaith o ddydd i ddydd. Yna byddwn yn ymdrin Γ’'r API MicroProfile, sy'n ddefnyddiol i ddatblygwyr y Gwanwyn wrth greu microwasanaethau.

Pam Quarkus? Yn gyntaf, codio byw yw hwn, hynny yw, ail-lwytho'n awtomatig unrhyw newidiadau yn yr API MicroProfile, Spring API ac APIs Java eraill, sy'n cael ei berfformio gydag un gorchymyn yn unig: mvn quarkus:dev. Yn ail, a drafodwyd yn yn ein hesiampl mae'r gwasanaeth Person (sy'n crynhoi APIs Spring, MicroProfile, a JPA i mewn i ddeuaidd gan ddefnyddio'r ddelwedd GraalVM brodorol) yn cychwyn mewn dim ond 0.055 eiliad ac yn cymryd tua 90 MB o RAM (RSS) ar ddiweddbwynt cais RESTful. Ar ben hynny, mae ei gasgliad ei hun yn cael ei berfformio gydag un gorchymyn yn unig: pecyn mvn -Pnative.

Ni fyddwn yn manylu ar MicroProfile, heblaw am helpu datblygwyr y Gwanwyn i ddeall sut y gallant ddefnyddio APIs Gwanwyn gydag APIs MicroProfile yn Quarkus.

Cynhwysyddion a Kubernetes

Er mwyn cadw'r erthygl hon yn syml, dim ond yr agweddau lefel uchel o gefnogaeth y byddwn yn eu cwmpasu yma. Kubernetes, oherwydd mae'n bwysig deall. Mae Quarkus wedi'i leoli fel pentwr Java ar gyfer Kubernetes, mae wedi'i gynllunio i leihau'r defnydd o gof ac amser cychwyn cymwysiadau a gwasanaethau Java, ac, o ganlyniad, cynyddu eu dwysedd ar y gwesteiwr a lleihau costau cyffredinol.

Quarkus hefyd yn cefnogi cynhyrchu ceir Kubernetes adnoddau a chynigion canllawiau i'w defnyddio ar lwyfannau Kubernetes a Red Hat OpenShift. Yn ogystal, mae Quarkus yn cynhyrchu'r ffeiliau Dockerfile.jvm (pecynnu JVM) a Dockerfile.native (pecynnu deuaidd brodorol) yn awtomatig i greu cynwysyddion.

Yn olaf, trwy ganolbwyntio ar Kubernetes fel yr amgylchedd lleoli targed, nid yw Quarkus yn defnyddio fframweithiau Java mewn achosion lle mae ymarferoldeb tebyg yn cael ei weithredu ar lefel platfform Kubernetes ei hun. Mae Tabl 1 yn darparu map o'r ohebiaeth swyddogaethol rhwng Kubernetes a fframweithiau Java nodweddiadol a ddefnyddir gan ddatblygwyr Spring.

Tabl 1. Map o ohebiaeth swyddogaethol rhwng fframweithiau Java a Kubernetes.

Swyddogaethol
Esgid y Gwanwyn Traddodiadol
Kubernetes

Darganfod gwasanaeth
Eureka
DNS

ffurfweddiad
Ffurfwedd Cwmwl y Gwanwyn
Mapiau/Cyfrinachau Ffurfweddu

Cydbwyso llwyth
Rhuban (ochr y cleient)
Gwasanaeth, Rheolydd Atgynhyrchu (ochr y gweinydd)

Llunio a rhedeg y cod o'r enghraifft

Yn yr erthygl hon rydym yn cyfeirio at prosiect enghreifftiol, lle defnyddir API Gwanwyn a MicroProfile a hyd yn oed yr un dosbarth Java gyda'i gilydd. Gellir llunio'r cod yn yr enghraifft hon a'i redeg o'r llinell orchymyn, gweler y ffeil README.md am fanylion.

APIs Fframwaith y Gwanwyn

Chwistrelliad Dibyniaeth

Mae Quarkus yn cefnogi ystod o APIs Chwistrellu Cyd-destun a Dibyniaeth (CDI). ac API Chwistrellu Dibyniaeth y Gwanwyn (Spring DI). Os ydych chi'n gweithio gyda MicroProfile, Java EE a Jakarta EE, yna rydych chi eisoes yn gyfarwydd iawn Γ’ CDI. Ar y llaw arall, gall datblygwyr y Gwanwyn ddefnyddio Quarkus Extension for Spring DI API i sicrhau cydnawsedd Γ’ Spring DI. Rhoddir enghreifftiau o ddefnyddio APIs Spring DI a gefnogir yn Nhabl 2.

Π’ prosiect o'n hesiampl Yn defnyddio CDI a Chwistrelliad Dibyniaeth y Gwanwyn. Am ragor o wybodaeth ac enghreifftiau ar y pwnc hwn, gweler y canllaw Quarkus o'r enw Canllaw DI y Gwanwyn.

Tabl 2. Enghreifftiau o ddefnyddio APIs Spring DI a gefnogir.

Nodweddion DI Gwanwyn a Gefnogir
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Chwistrelliad Adeiladwr

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

Chwistrelliad Maes
Autowired
Gwerth

@Autowired
@RestClient
SalutationRestClient salutationRestClient;

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

Bean
@Cyfluniad

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

Cydran

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

Gwasanaeth

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

   public String getPrefix() {
      return message;
   }
}

Fframwaith gwe

Bydd defnyddwyr MicroProfile wrth eu bodd bod Quarkus yn cefnogi JAX-RS, MicroProfile Rest Client, JSON-P, a JSON-B fel y model rhaglennu gwe sylfaenol. Bydd datblygwyr y gwanwyn yn falch o gefnogaeth ddiweddar Quarkus i API Spring Web, yn enwedig rhyngwynebau REST. Yn debyg i Spring DI, prif nod cefnogaeth Spring Web API yw galluogi datblygwyr Spring i ddefnyddio Spring Web APIs ar y cyd ag API MicroProfile. Darperir enghreifftiau o sut i ddefnyddio'r APIs Spring Web a gefnogir yn Nhabl 3, a cheir rhagor o wybodaeth ac enghreifftiau ar y pwnc hwn yn y tiwtorial Quarkus o'r enw Canllaw Gwe Gwanwyn.

Tabl 3. Enghreifftiau o ddefnyddio API Gwe Gwanwyn a gefnogir.

Nodweddion Gwe Gwanwyn a Gefnogir
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

@RestController
@RequestMapping

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

@GetMapping
@PostMapio
@PutMapio
@DeleteMapping
@PatchMapping
@CaisParam
@RequestHeader
@MatrixAmrywiol
@PathAmrywiol
@CookieValue
@CaisBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (rhannol)

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

JPA Data Gwanwyn

Bydd defnyddwyr MicroProfile hefyd yn gwerthfawrogi bod Quarkus yn cefnogi JPA gan ddefnyddio'r Hibernate ORM. Mae yna newyddion da hefyd i ddatblygwyr y Gwanwyn: mae Quarkus yn cefnogi anodiadau a mathau cyffredin o JPA Data Gwanwyn. Rhoddir enghreifftiau o ddefnyddio’r APIs JPA Data Gwanwyn a gefnogir yn Nhabl 4.
Π’ prosiect o'n hesiampl Defnyddir APIs JPA Spring Data ac mae mwy o wybodaeth ar gael yn y tiwtorial Quarkus o'r enw Canllaw JPA Data Gwanwyn.

Tabl 4. Enghreifftiau o ddefnyddio APIs JPA Data Gwanwyn a gefnogir.

Nodweddion JPA Data Gwanwyn a Gefnogir
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Ystorfa Crud

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

Repository
JpaYstorfa
Ystorfa PagingAndSorting

public class PersonRepository extends 

    Repository {

    Person save(Person entity);

    Optional findById(Person entity);
}

Darnau Cadwrfa

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

Dulliau ymholiad sy'n deillio

public interface PersonRepository extends CrudRepository {

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

    Boolean existsBookByYearOfBirthBetween(
            Integer start, Integer end);
}

Ymholiadau wedi'u diffinio gan ddefnyddwyr

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

APIs MicroProffil

Goddefgarwch bai

Mae lluniadau goddefgarwch diffyg yn bwysig iawn ar gyfer atal methiannau rhaeadru a chreu pensaernΓ―aeth microwasanaeth dibynadwy. Mae datblygwyr y gwanwyn wedi bod yn defnyddio torwyr cylched i oddef diffygion ers blynyddoedd lawer. Hystrix. Fodd bynnag, nid yw Hystrix wedi'i ddiweddaru ers amser maith, ond mae Goddefgarwch Diffygion MicroProfile bellach yn datblygu'n weithredol ac mae ganddo sawl blwyddyn o ddefnydd cynhyrchu y tu Γ΄l iddo. Felly, er mwyn gwella dibynadwyedd gwasanaethau yn Quarkus, argymhellir defnyddio'r API Goddefgarwch Nam MicroProfile, y defnyddir enghreifftiau ohonynt yn Nhabl 5. Am ragor o wybodaeth am hyn, gweler llawlyfr Quarkus Canllaw Goddefiad Nam.

Tabl 5. Enghreifftiau o ddefnyddio API Goddefiad Nam MicroProfile a gefnogir.

Nodweddion Goddefgarwch Nam MicroProfile
Disgrifiad
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

@Asynchronous

Gweithredu rhesymeg mewn edefyn ar wahΓ’n

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

@Bulkhead

Cyfyngu ar nifer y ceisiadau cydamserol

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

@CircuitBreaker

Trin methiant craff ac adferiad o fethiannau

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

@cwymp

Galw rhesymeg amgen rhag ofn y bydd methiant

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

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

Ailadroddwch

Rhowch gynnig arall arni ar gais methu

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

Goramser

Goramser rheoli methiant

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

Gwasanaethau gwirio (Gwasanaeth Iechyd)

Mae llwyfannau Kubernetes yn monitro iechyd cynwysyddion gan ddefnyddio gwasanaethau arbennig. Er mwyn caniatΓ‘u i'r platfform gwaelodol fonitro gwasanaethau, mae datblygwyr y Gwanwyn fel arfer yn defnyddio Dangosydd Iechyd wedi'i deilwra ac Actuator Boot Spring. Yn Quarkus, gellir gwneud hyn gan ddefnyddio MicroProfile Health, sydd yn ddiofyn yn cynnal gwiriad bywiogrwydd, ond y gellir ei ffurfweddu i wirio bywiogrwydd a pharodrwydd ar yr un pryd. Darperir enghreifftiau o sut i ddefnyddio'r APIs MicroProfile Health a gefnogir yn Nhabl 6, a darperir gwybodaeth ychwanegol yn llawlyfr Quarkus Canllaw Iechyd.

Tabl 6: Enghreifftiau defnydd o APIs MicroProfile Health a gefnogir.

Nodweddion MicroProfile Health
Disgrifiad
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

@bywoliaeth

Mae'r platfform yn ailgychwyn cymwysiadau wedi'u cynhwysyddio wedi methu
Diweddbwynt:
gwesteiwr:8080/iechyd/byw

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

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

@parodrwydd

Ni fydd y platfform yn anfon traffig i gymwysiadau cynhwysydd os nad yw'n barod
Diweddbwynt:
gwesteiwr:8080/iechyd/yn barod

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

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

Metrigau

Mae ceisiadau'n darparu metrigau naill ai at ddibenion gweithredol (i fonitro CLGau perfformiad) neu at ddibenion anweithredol (CLGau busnes). Mae datblygwyr y gwanwyn yn darparu metrigau gan ddefnyddio Spring Boot Actuator a Micrometer. Yn ei dro, mae Quarkus yn defnyddio MicroProfile Metrics i ddarparu metrigau llinell sylfaen (JVM a system weithredu), metrigau gwerthwr (Quarkus), a metrigau cais. Mae MicroProfile Metrics yn mynnu bod y gweithrediad yn cefnogi fformatau allbwn JSON ac OpenMetrics (Prometheus). Rhoddir enghreifftiau o ddefnyddio API Metrigau MicroProfile yn Nhabl 7.

Π’ prosiect o'n hesiampl Defnyddir Metrigau MicroProffil i ddarparu metrigau cais. Am ragor o wybodaeth, gweler llawlyfr Quarkus Canllaw i Fetrigau.

Tabl 7. Enghreifftiau o ddefnyddio API Metrig MicroProfile.

Nodweddion Metrigau MicroProffil
Disgrifiad
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

@cyfrif

Yn dynodi rhifydd sy'n cyfrif sawl gwaith y mae gwrthrych anodedig wedi'i alw

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

@ConcurrentGauge

Yn dynodi mesurydd sy'n cyfrif nifer y galwadau cydamserol i wrthrych anodedig

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

@Gauge

Yn dynodi synhwyrydd mesurydd sy'n mesur gwerth gwrthrych anodedig

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

@Metered

Yn dynodi synhwyrydd mesurydd sy'n monitro amlder galwadau gwrthrych anodedig

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

Metrig

Anodiad yn cynnwys gwybodaeth am fetadata pan dderbynnir cais i fewnbynnu neu gynhyrchu metrig

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

Wedi'i amseru

Yn dynodi amserydd sy'n olrhain hyd gwrthrych anodedig

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

Pwyntiau Terfyn Metrics

Metrigau cais localhost:8080/metrics/cais
Metrigau sylfaenol localhost:8080/metrig/sylfaen
metrigau gwerthwr localhost:8080/metrics/gwerthwr
Pob metrig localhost:8080/metreg

Cleient Rest MicroProfile

Mae microservices yn aml yn darparu pwyntiau terfyn RESTful sy'n gofyn am APIs cleient cyfatebol i weithio gyda nhw. I ddefnyddio pwyntiau terfyn RESTful, mae datblygwyr y Gwanwyn fel arfer yn defnyddio RestTemplate. Mae Quarkus yn cynnig API Cleient Rest MicroProfile i ddatrys y broblem hon, a rhoddir enghreifftiau o ddefnydd ohonynt yn Nhabl 8.

Π’ prosiect o'n hesiampl mae'r defnydd o endpoints RESTful yn cael ei wneud gan ddefnyddio'r Cleient Rest MicroProfile. Ceir rhagor o wybodaeth ac enghreifftiau ar y pwnc hwn yn llawlyfr Quarkus Canllaw Cleient Rest.

Tabl 8. Enghreifftiau o ddefnyddio API Cleient Rest MicroProfile.

Nodweddion Cleient Rest MicroProfile
Disgrifiad
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

@RegisterRestClient

Yn cofrestru rhyngwyneb Java wedi'i deipio fel cleient REST

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

@RestClient

Yn nodi gweithredu enghraifft o ryngwyneb cleient REST wedi'i deipio

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

Ymglymiad

Yn galw pwynt terfyn REST

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

mp-gweddill/url

Yn pennu diweddbwynt REST

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

Canlyniadau

Yn y blog hwn, sydd wedi'i anelu'n bennaf at ddatblygwyr y Gwanwyn, fe wnaethom edrych yn gyflym ar sut i ddefnyddio APIs y Gwanwyn gyda'r API MicroProfile yn Quarkus i ddatblygu microwasanaethau Java ac yna eu llunio i god deuaidd brodorol sy'n arbed cannoedd o megabeit o RAM ac yn lansio i mewn. mater o filieiliadau.

Fel y dealloch eisoes, mae mwy o wybodaeth am gefnogaeth ar gyfer API Gwanwyn a MicroProffil, yn ogystal Γ’ llawer o wybodaeth ddefnyddiol arall, ar gael yn Llawlyfrau Quarkus.

Ffynhonnell: hab.com

Ychwanegu sylw