Fa'afefea ona tu'ufa'atasia e Quarkus le MicroProfile ma le Spring

Talofa tagata uma, o le fa'ailoga lona tolu lea i le fa'asologa o Quarkus!

Fa'afefea ona tu'ufa'atasia e Quarkus le MicroProfile ma le Spring

Pe a atiaʻe Java microservices, e masani ona talitonuina Eclipse MicroProfile и Tautotogo tautotogo o API tuto'atasi ma tuto'atasi. Ona o le le mafai, e masani ona faʻaogaina e le au fai polokalame API ua uma ona latou faʻaaogaina, talu ai o le aʻoaʻoina o fausaga fou ma vaega taʻavale e manaʻomia tele le taimi. O aso nei o le a tatou taumafai e faʻafaigofie le atinaʻeina o nisi lauiloa MicroProfile API mo tagata atiaʻe Spring ma fa'aali atu ia te oe le fa'aogaina o le Spring API i le taimi e tasi ma foliga aoga fou quarkus.

I se fa'amatalaga sili atu, o le a tatou va'ai muamua i le lautele ma fa'amatalaga o le auala e lagolagoina ai e Quarkus Spring APIs e fa'aali atu ai i le au atina'e Spring le fa'aogaina o le MicroProfile API ia latou galuega i lea aso ma lea aso. Ona matou ufiufi lea o MicroProfile APIs, e aoga mo Spring developers pe a fatuina microservices.

Aisea Quarkus? Muamua, o le coding ola lea, o lona uiga, toe faʻapipiʻiina otometi soʻo se suiga i le MicroProfile API, Spring API ma isi Java API, lea e faia i le tasi le poloaiga: mvn quarkus: dev. Lona lua, mafaufau i totonu i la tatou faataitaiga le Auaunaga Tagata (lea e tuufaatasia mai Spring, MicroProfile, ma JPA APIs i se binary e faʻaaoga ai le ata o le GraalVM masani) e amata ile 0.055 sekone ma ave ile 90 MB o le RAM (RSS) i luga ole faʻasologa ole talosaga RESTful. E le gata i lea, o lona tuufaatasiga lava ia e faia i le na o le tasi le poloaiga: mvn package -Pnative.

O le a matou le faʻamatalaina auiliili e uiga i MicroProfile, e ese mai i le fesoasoani i tagata atiae Spring ia malamalama pe faʻapefea ona latou faʻaogaina Spring API ma MicroProfile API i Quarkus.

Container ma Kubernetes

Ina ia fa'afaigofie lenei tusiga, o le a na'o le tulaga maualuga o le lagolago iinei. Kubernetes, aua e taua le malamalama. Quarkus o loʻo faʻatulagaina o se Java stack mo Kubernetes, ua mamanuina e faʻaitiitia ai le mafaufau ma le taimi amata o Java talosaga ma auaunaga, ma, o se taunuuga, faʻateleina lo latou maualuga i luga o le talimalo ma faʻaitiitia le tau atoa.

Quarkus foi lagolagoina le gaosiga o taavale Kubernetes punaoa ma ofo ta'ita'i mo le faʻapipiʻiina i luga ole Kubernetes ma Red Hat OpenShift platforms. E le gata i lea, e otometi lava ona gaosia e Quarkus le Dockerfile.jvm (JVM packaging) ma Dockerfile.native (native binary packaging) faila e manaʻomia e fai ai pusa.

Ma le mea mulimuli, e ala i le taulaʻi atu i Kubernetes e avea ma siosiomaga faʻapipiʻiina, e le faʻaogaina e Quarkus ni Java frameworks i mataupu e faʻatino ai galuega tutusa i le tulaga o le Kubernetes platform lava ia. Laulau 1 o loʻo tuʻuina atu ai se faʻafanua o fesoʻotaʻiga faʻatinoga i le va o Kubernetes ma faʻataʻitaʻiga masani Java o loʻo faʻaogaina e tagata atiaʻe Spring.

Laulau 1. Fa'afanua o feso'ota'iga fa'atino i le va o fa'ava'a Java ma Kubernetes.

Faʻamasinoga
Se'e tautotogo masani
Kubernetes

Auaunaga su'esu'e
Eureka
DNS

Configuration
Spring Cloud Config
Config Faafanua/Faalilo

Tau faʻatatau paleni
Lipine (itu o le tagata fa'atau)
Au'aunaga, Pule Fa'aliliuina (itu o le server)

Faʻapipiʻiina ma faʻatautaia le code mai le faʻataʻitaʻiga

I lenei tusiga tatou te faasino i ai galuega faataitai, lea o loʻo faʻaogaina faʻatasi ai le Spring ma MicroProfile API ma e oʻo lava i le vasega Java tutusa. O le code i lenei faʻataʻitaʻiga e mafai ona tuʻufaʻatasia ma tamoe mai le laina faʻatonu, vaʻai le README.md faila mo faʻamatalaga.

Spring Framework APIs

Tui Faamoemoe

E lagolagoina e Quarkus le tele o Tulaga ma Fa'alagolago i Injection (CDI) APIs ma Spring Dependency Injection (Spring DI) APIs. Afai o loʻo e galue ma MicroProfile, Java EE ma Jakarta EE, ona e masani lelei lea i le CDI. I le isi itu, e mafai e le au atinaʻe Spring ona faʻaogaina le Quarkus Extension mo Spring DI API e ausia ai le fetaui ma Spring DI. O fa'ata'ita'iga o le fa'aogaina o Spring DI API o lo'o lagolagoina o lo'o tu'uina atu ile Laulau 2.

В galuega faatino mai la tatou faataitaiga Fa'aaoga uma CDI ma Spring Dependency Injection. Mo nisi faʻamatalaga ma faʻataʻitaʻiga i lenei autu, tagai i le taʻiala a Quarkus ua taʻua Spring DI Guide.

Laulau 2. Fa'ata'ita'iga o le fa'aogaina o Spring DI APIs.

Lagolagoina Spring DI Features
faataitaiga

Fauina tui

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

Fa'a tui
Uaea otometi
tāua

@Autowired
@RestClient
SalutationRestClient salutationRestClient;

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

Peni
@Faʻamatalaga

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

Vaega

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

tautua

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

   public String getPrefix() {
      return message;
   }
}

Uepi fa'avae

O le a fiafia tagata fa'aoga MicroProfile e lagolagoina e Quarkus le JAX-RS, MicroProfile Rest Client, JSON-P, ma le JSON-B e avea ma fa'ata'ita'iga fa'apolokalame i luga ole laiga. O le a fiafia le au atinaʻe tautotogo i le lagolago lata mai a Quarkus mo le Spring Web API, aemaise lava fesoʻotaʻiga REST. E tutusa ma Spring DI, o le sini autu o le Spring Web API lagolago o le mafai lea e le au atinaʻe Spring ona faʻaoga Spring Web API faʻatasi ma MicroProfile APIs. O faʻataʻitaʻiga o le faʻaogaina o Spring Web APIs o loʻo lagolagoina i le Laulau 3, ma nisi faʻamatalaga ma faʻataʻitaʻiga i lenei autu e mafai ona maua i le Quarkus tutorial e taʻua. Spring Web Guide.

Laulau 3. Fa'ata'ita'iga o le fa'aogaina o Spring Web APIs lagolago.

Lagolagoina Spring Web Features
faataitaiga

@RestController
@RequestMapping

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

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@TalosagaParam
@RequestHeader
@MatrixVariable
@PathVariable
@KukiValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (vaega)

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

Spring DataJPA

O le a talisapaia foi e tagata faʻaoga MicroProfile e lagolagoina e Quarkus le JPA e faʻaaoga ai le Hibernate ORM. O lo'o iai fo'i tala lelei mo tagata atia'e Tautotogo: E lagolagoina e Quarkus fa'amatalaga masani ma ituaiga o Spring Data JPA. O fa'ata'ita'iga o le fa'aogaina o Spring Data JPA APIs o lo'o lagolagoina i le Laulau 4.
В galuega faatino mai la tatou faataitaiga Spring Data JPA API o loʻo faʻaaogaina ma o loʻo maua nisi faʻamatalaga i le Quarkus aʻoaʻoga ua taʻua Spring Data JPA Guide.

Laulau 4. Fa'ata'ita'iga o le fa'aogaina o Spring Data JPA APIs.

Lagolagoina Spring Data JPA Features
faataitaiga

CrudRepository

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

Faletupe
JpaRepository
PagingAndSortingRepository

public class PersonRepository extends 

    Repository {

    Person save(Person entity);

    Optional findById(Person entity);
}

Fa'ato'aga Fa'asoa

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

Metotia fesili maua'i

public interface PersonRepository extends CrudRepository {

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

    Boolean existsBookByYearOfBirthBetween(
            Integer start, Integer end);
}

Fesili fa'asinoina e le tagata fa'aoga

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

Fa'apalepale masei

O faufale fa'apalepale fa'aletonu e taua tele mo le puipuia o fa'aletonu fa'asolo ma le fa'atupuina o fausaga fa'apitoa microservice. O lo'o fa'aogaina e le au atia'e le tautotogo ta'avale ta'avale mo le fa'apalepaleina o fa'aletonu mo le tele o tausaga. Hystrix. Ae ui i lea, o le Hystrix e leʻi faʻafouina mo se taimi umi, ae o le MicroProfile's Fault Tolerance o loʻo faʻatupuina nei ma e tele tausaga o faʻaaogaina le gaosiga i tua atu. O le mea lea, ina ia faʻaleleia le faʻamaoni o auaunaga i Quarkus, e fautuaina e faʻaaoga le MicroProfile Fault Tolerance APIs, faʻataʻitaʻiga o loʻo faʻaaogaina i le Laulau 5. Mo nisi faʻamatalaga e uiga i lenei mea, vaʻai le Quarkus manual Ta'iala Fa'apalepale Fa'aletonu.

Laulau 5. Fa'ata'ita'iga o le fa'aogaina o le MicroProfile Fault Tolerance API e lagolagoina.

MicroProfile Fault Tolerance Features
faʻamatalaga
faataitaiga

@Asynchronous

Fa'atinoina le fa'atatau i se filo eseese

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

@Bulkhead

Fa'atapula'a le numera o talosaga fa'atasi

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

@CircuitBreaker

Fa'ata'ita'iga fa'aletonu le taulimaina ma le toe fa'aleleia mai fa'aletonu

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

@Fallback

Vala'au isi manatu pe a fa'aletonu

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

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

Retry

Toe taumafai pe a le manuia talosaga

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

Uma le taimi

Taimi fa'aletonu pulea

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

Au'aunaga siaki (Au'aunaga Soifua Maloloina)

Kubernetes platforms e mataʻituina le soifua maloloina o pusa e faʻaaoga ai auaunaga faʻapitoa. Ina ia faʻatagaina le faʻavae autu e mataʻituina auaunaga, e masani ona faʻaogaina e le au atinaʻe Spring se tu masani a le HealthIndicator ma Spring Boot Actuator. I Quarkus, e mafai ona faia lenei mea e faʻaaoga ai le MicroProfile Health, lea e le mafai ona faia se siaki ola, ae mafai ona faʻatulagaina e siaki ai le ola ma le sauni. O faʻataʻitaʻiga o le faʻaogaina o MicroProfile Health API o loʻo lagolagoina o loʻo tuʻuina atu i le Laulau 6, ma faʻamatalaga faaopoopo o loʻo tuʻuina atu i le tusi lesona a Quarkus Taʻiala mo le Soifua Maloloina.

Laulau 6: Fa'ata'ita'iga fa'aoga o MicroProfile Health APIs e lagolagoina.

MicroProfile Soifua Maloloina foliga
faʻamatalaga
faataitaiga

@Olaola

Ua le mafai ona toe fa'afou le tulaga fa'apolokalame talosaga
Fa'ai'uga:
talimalo: 8080 / soifua maloloina / ola

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

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

@Sauniuni

O le a le tu'uina atu e le fa'asalalauga ta'avale i talosaga fa'apipi'i pe a le o sauni
Fa'ai'uga:
talimalo: 8080 / soifua maloloina / sauni

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

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

Fuafuaga

O talosaga e tu'uina atu fua fa'atatau mo fa'amoemoega fa'agaioiga (e mata'ituina SLA fa'atinoga) po'o fa'amoemoega e le fa'atinoina (sLAs pisinisi). O lo'o tu'uina atu e le au atina'e le tautotogo ni metotia e fa'aaoga ai Spring Boot Actuator ma Micrometer. I le isi itu, e faʻaogaina e Quarkus MicroProfile Metrics e tuʻuina atu ai fua faʻavae (JVM ma le faʻaogaina o le system), faʻatauga faʻatau (Quarkus), ma faʻatatauga talosaga. MicroProfile Metrics e manaʻomia le faʻatinoga e lagolagoina JSON ma OpenMetrics (Prometheus) faʻasologa o galuega. O fa'ata'ita'iga o le fa'aogaina o le MicroProfile Metrics API o lo'o tu'uina atu ile Laulau 7.

В galuega faatino mai la tatou faataitaiga MicroProfile Metrics e faʻaaogaina e tuʻuina atu ai fua faʻatatau. Mo nisi faamatalaga, tagai i le tusi lesona a Quarkus Taiala Fuafuaga.

Laulau 7. Fa'ata'ita'iga o le fa'aogaina o MicroProfile Metrics APIs.

MicroProfile metrics Features
faʻamatalaga
faataitaiga

@faitau

Fa'ailoaina se fata fa'atau e faitau le aofa'i o taimi na vala'au ai se mea fa'amatalaga

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

@ConcurrentGauge

Fa'ailoa se fua e faitau ai le numera o telefoni fa'atasi i se mea fa'ailoa

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

@fua

Fa'ailoa se fua fa'atatau e fua ai le tau o se mea fa'amatalaga

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

@Metered

Fa'ailoa se mita fa'amau e mata'ituina le tele o le vala'au o se mea fa'amatalaga

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

Metric

O se fa'amatalaga o lo'o iai fa'amatalaga e uiga i metadata pe a maua se talosaga e ulufale pe fa'ailoa mai se metric

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

Taimi

Fa'ailoa mai se taimi e siaki ai le umi o se mea fa'amatalaga

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

Su'ega Fa'ai'uga

Fa'atatauga o talosaga localhost:8080/metrics/faatatau
Fuafuaga autu localhost:8080/metrics/faavae
Fua fa'atau localhost:8080/metrics/fa'atau
Fuafuaga uma localhost:8080/metrics

MicroProfile Rest Client

Microservices e masani ona tu'uina atu fa'ai'uga malō e mana'omia ai API fa'atatau e galulue ai. Mo le fa'aogaina o fa'ai'uga RESTful, e masani ona fa'aogaina e le au atina'e Spring RestTemplate. Quarkus ofo atu MicroProfile Rest Client APIs e foia ai lenei faʻafitauli, faʻataʻitaʻiga o le faʻaaogaina o loʻo tuʻuina atu i le Laulau 8.

В galuega faatino mai la tatou faataitaiga o le fa'aogaina o fa'ai'uga RESTful e faia i le fa'aaogaina o le MicroProfile Rest Client. O nisi faʻamatalaga ma faʻataʻitaʻiga i lenei autu e mafai ona maua i le tusi lesona a Quarkus Malolo Client Guide.

Laulau 8. Fa'ata'ita'iga o le fa'aogaina ole MicroProfile Rest Client APIs.

MicroProfile Rest Client Features
faʻamatalaga
faataitaiga

@RegisterRestClient

Lesitalaina se fa'aoga Java lolomi e fai ma tagata fa'atau REST

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

@RestClient

Fa'ailogaina le fa'atinoina o se fa'ata'ita'iga o se fa'aoga a le tagata fa'atau REST

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

Faʻasalaga

Ta'u se mea e gata ai le REST

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

mp-malologa/url

Fa'ama'oti le pito i'uga o le REST

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

O taunuʻuga

I totonu o lenei blog, e faʻatatau i le Spring developers, na matou vaʻavaʻai vave i le faʻaogaina o Spring API ma MicroProfile APIs i Quarkus e atiaʻe ai Java microservices ona tuʻufaʻatasia lea i totonu o le numera binary code e faʻasaoina ai le faitau selau o megabytes o le RAM ma faʻalauiloa i totonu. se mataupu o milliseconds.

E pei ona e malamalama i ai, o nisi faʻamatalaga e uiga i le lagolago mo Spring ma MicroProfile API, faʻapea foʻi ma le tele o isi faʻamatalaga aoga, e mafai ona maua i totonu. Quarkus tusi lesona.

puna: www.habr.com

Faaopoopo i ai se faamatalaga