Yadda Quarkus ya haɗa MicroProfile da Spring

Sannu kowa, ga rubutu na uku a cikin jerin Quarkus!

Yadda Quarkus ya haɗa MicroProfile da Spring

Lokacin haɓaka microservices na Java, galibi ana yarda da hakan Eclipse MicroProfile и Takalmin bazara APIs ne daban kuma masu zaman kansu. Ta hanyar tsoho, masu shirye-shirye suna yin amfani da APIs ɗin da aka riga aka saba amfani da su da su, tunda koyan sabbin tsarin aiki da abubuwan da aka haɗa lokacin aiki yana ɗaukar lokaci mai yawa. A yau za mu yi ƙoƙari mu sauƙaƙe ci gaban wasu shahararrun API ɗin MicroProfile don masu haɓaka bazara kuma ya nuna muku yadda ake amfani da API na bazara tare da sabbin abubuwa masu amfani kwarkus.

A cikin ɗan ƙarin daki-daki, za mu fara duba iyawa da cikakkun bayanai na yadda Quarkus ke tallafawa APIs na bazara don nunawa masu haɓaka bazara yadda ake amfani da MicroProfile API a cikin ayyukansu na yau da kullun. Sannan za mu rufe MicroProfile APIs, waɗanda ke da amfani ga masu haɓaka lokacin bazara lokacin ƙirƙirar ƙananan sabis.

Me yasa Quarkus? Da fari dai, wannan ita ce rikodin rikodin kai tsaye, wato, sake lodi ta atomatik na kowane canje-canje a cikin MicroProfile API, Spring API da sauran APIs Java, waɗanda aka yi da umarni ɗaya kawai: mvn quarkus:dev. Na biyu, la'akari a a cikin misalinmu Sabis na Mutum (wanda ke tattarawa daga Spring, MicroProfile, da JPA APIs zuwa binary ta amfani da hoton GraalVM na asali) yana farawa a cikin daƙiƙa 0.055 kawai kuma yana ɗaukar kusan 90 MB na RAM (RSS) akan ƙarshen aikace-aikacen RESTful. Haka kuma, ana yin ta da kanta tare da umarni ɗaya kawai: mvn package -Pnative.

Ba za mu yi cikakken bayani game da MicroProfile ba, ban da don taimakawa masu haɓaka bazara su fahimci yadda za su iya amfani da APIs na bazara tare da MicroProfile APIs a cikin Quarkus.

Kwantena da Kubernetes

Don kiyaye wannan labarin mai sauƙi, za mu rufe babban matakin tallafi kawai a nan. Kubernetes, domin yana da mahimmanci a fahimta. An sanya Quarkus azaman tari na Java don Kubernetes, an ƙera shi don rage yawan ƙwaƙwalwar ajiya da lokacin farawa na aikace-aikacen Java da sabis, kuma, a sakamakon haka, ƙara yawan su akan mai watsa shiri da rage farashin gabaɗaya.

Quarkus kuma yana goyan bayan samar da mota Kubernetes albarkatun da tayi jagorori don turawa akan dandamali na Kubernetes da Red Hat OpenShift. Bugu da ƙari, Quarkus ta atomatik yana haifar da Dockerfile.jvm (fakitin JVM) da Dockerfile.native (marufi na asali) fayilolin da ake buƙata don ƙirƙirar kwantena.

A ƙarshe, ta hanyar mayar da hankali kan Kubernetes a matsayin mahallin ƙaddamar da manufa, Quarkus baya amfani da tsarin Java a lokuta inda aka aiwatar da irin wannan aiki a matakin dandalin Kubernetes kanta. Tebu 1 yana ba da taswirar aikin wasiku tsakanin Kubernetes da tsarin Java na yau da kullun da masu haɓaka bazara ke amfani da su.

Tebur 1. Taswirar wasiƙun aiki tsakanin tsarin Java da Kubernetes.

Aiki
Boot na bazara na gargajiya
Kubernetes

Gano sabis
Eureka
DNS

Kanfigareshan
Tsarin Cloud Cloud
Sanya Taswirori/Asiri

Load daidaita
Ribbon (bangaren abokin ciniki)
Sabis, Mai sarrafa Maimaitawa (bangaren uwar garken)

Haɗawa da gudanar da code daga misalin

A cikin wannan labarin mun koma zuwa misali aikin, inda ake amfani da APIs na Spring da MicroProfile har ma da aji iri ɗaya na Java tare. Ana iya haɗa lambar a cikin wannan misalin kuma a gudanar da ita daga layin umarni, duba fayil ɗin README.md don cikakkun bayanai.

APIs Framework na bazara

Allurar Dogaro

Quarkus yana goyan bayan kewayon Abubuwan da ake magana da allurar Dogaro (CDI) APIs da Injection Dogarawar bazara (Spring DI) APIs. Idan kuna aiki tare da MicroProfile, Java EE da Jakarta EE, to kun riga kun saba da CDI. A gefe guda, masu haɓaka lokacin bazara na iya amfani da Ƙarshen Quarkus don Spring DI API don cimma daidaituwa tare da Spring DI. Misalai na amfani da tallafin Spring DI APIs ana bayar da su a cikin Tebur 2.

В aikin daga misalinmu Yana amfani da duka CDI da allurar Dogarowar bazara. Don ƙarin bayani da misalai kan wannan batu, duba jagorar Quarkus da ake kira Spring DI Jagora.

Tebura 2. Misalai na amfani da APIs na Spring DI masu goyan bayan.

Goyan bayan Fasalolin DI na bazara
misalai

Allurar gini

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

Allurar fili
Mai sarrafa kansa
darajar

@Autowired
@RestClient
SalutationRestClient salutationRestClient;

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

wake
@Configuration

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

bangaren

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

Tsarin Yanar Gizo

Masu amfani da MicroProfile za su ƙaunaci cewa Quarkus yana goyan bayan JAX-RS, Abokin Hulɗa na MicroProfile, JSON-P, da JSON-B a matsayin ƙirar shirye-shiryen yanar gizo na farko. Masu haɓaka lokacin bazara za su ji daɗin goyan bayan Quarkus na kwanan nan don API ɗin Gidan Yanar Gizon bazara, musamman musaya na REST. Mai kama da Spring DI, babban burin tallafin Gidan Yanar Gizo na Spring shine don baiwa masu haɓaka lokacin bazara damar amfani da APIs na Gidan Yanar Gizo na bazara tare da MicroProfile APIs. Ana ba da misalan yadda ake amfani da APIs masu goyan bayan Spring Web APIs, kuma ana iya samun ƙarin bayani da misalai kan wannan batu a cikin koyawa ta Quarkus da ake kira. Jagorar Yanar Gizo na bazara.

Tebura 3. Misalai na amfani da APIs na Gidan Yanar Gizo na bazara mai goyan bayan.

Goyan bayan Abubuwan Yanar Gizo na bazara
misalai

@RestController
@RequestMapping

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

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@Request Header
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (bangare)

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

Bayanan Bayani na JPA

Masu amfani da MicroProfile kuma za su yaba cewa Quarkus yana goyan bayan JPA ta amfani da Hibernate ORM. Hakanan akwai labari mai daɗi ga masu haɓaka lokacin bazara: Quarkus yana goyan bayan bayanan bayanan bazara na yau da kullun na JPA da nau'ikan. Misalai na amfani da goyan bayan bayanan bazara JPA APIs ana bayar da su a cikin Tebur 4.
В aikin daga misalinmu Ana amfani da bayanan JPA APIs na bazara kuma ana samun ƙarin bayani a cikin koyawa ta Quarkus da ake kira Bayanin Spring JPA Guide.

Tebur 4. Misalai na amfani da goyan bayan bayanan bazara JPA APIs.

Fasalolin JPA Bayanan Lokacin bazara
misalai

Rubutun Rubutun

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

mangaza
JpaRepository
Rukunin Rubutun Rubuce-Rubuce daSarting

public class PersonRepository extends 

    Repository {

    Person save(Person entity);

    Optional findById(Person entity);
}

Rubutun Ma'ajiya

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

Hanyoyin tambaya da aka samo

public interface PersonRepository extends CrudRepository {

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

    Boolean existsBookByYearOfBirthBetween(
            Integer start, Integer end);
}

Ƙayyadaddun tambayoyin mai amfani

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 na MicroProfile

Haƙuri na kuskure

Gina haƙurin kuskure yana da matukar mahimmanci don hana lalacewar lalacewa da ƙirƙirar amintattun gine-ginen microservice. Masu haɓaka lokacin bazara sun kasance suna amfani da na'urorin da'ira don haƙurin kuskure shekaru da yawa. Hystrix. Koyaya, ba a sabunta Hystrix na dogon lokaci ba, amma Haƙurin Laifin MicroProfile yanzu yana haɓaka sosai kuma yana da shekaru da yawa na amfani da samarwa a baya. Sabili da haka, don inganta amincin ayyuka a cikin Quarkus, ana ba da shawarar yin amfani da APIs na MicroProfile Fault Tolerance APIs, misalan waɗanda ake amfani da su a cikin Tebur 5. Don ƙarin bayani game da wannan, duba littafin Quarkus Jagoran Haƙuri Laifi.

Tebur 5. Misalai na amfani da goyon bayan MicroProfile Fault Tolerance APIs.

Abubuwan Hakuri Laifin MicroProfile
Description
misalai

@Asynchronous

Yin aiwatar da dabaru a cikin wani zare daban

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

@Bulkhead

Iyakance adadin buƙatun lokaci guda

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

@CircuitBreaker

Smart gazawar handling da murmurewa daga kasawa

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

@Faduwa

Kira madadin dabaru idan akwai gazawa

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

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

Sake jarrabawa

Sake gwada gazawar nema

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

Lokaci

Ƙarshen lokacin sarrafa gazawa

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

Ayyukan Dubawa (Kiwon Lafiyar Sabis)

Kubernetes dandamali suna lura da lafiyar kwantena ta amfani da ayyuka na musamman. Don ba da damar dandamalin da ke ƙasa don sa ido kan ayyuka, masu haɓaka bazara yawanci suna amfani da Alamar Lafiya ta al'ada da Boot Actuator na bazara. A cikin Quarkus, ana iya yin wannan ta amfani da MicroProfile Health, wanda ta tsohuwa yana yin rajistan rayuwa, amma ana iya saita shi don bincika rayuwa da shirye-shiryen lokaci guda. Ana bayar da misalan yadda ake amfani da API ɗin Kiwon Lafiyar MicroProfile da ke goyan baya a cikin Tebur 6, kuma an bayar da ƙarin bayani a cikin littafin Quarkus. Jagoran Lafiya.

Tebur 6: Misalai na amfani na APIs Lafiyar Ƙwararrun Ƙwararru masu goyan bayan.

Fasalolin Lafiyar MicroProfile
Description
misalai

@Rayuwa

Dandali yana sake kunna aikace-aikacen da ba su cika kwantena ba
Ƙarshe:
Mai watsa shiri: 8080/lafiya/rayuwa

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

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

@Shirya

Dandalin ba zai aika da zirga-zirga zuwa aikace-aikacen kwantena ba idan ba a shirya ba
Ƙarshe:
mai watsa shiri: 8080 / lafiya / shirye

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

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

Ma'auni

Aikace-aikace suna ba da ma'auni don dalilai na aiki (don saka idanu akan SLAs) ko dalilai marasa aiki (SLAs kasuwanci). Masu haɓaka bazara suna ba da awo ta amfani da Spring Boot Actuator da Micrometer. Bi da bi, Quarkus yana amfani da MicroProfile Metrics don samar da ma'auni na asali (JVM da tsarin aiki), ma'aunin mai siyarwa (Quarkus), da ma'aunin aikace-aikace. MicroProfile Metrics yana buƙatar aiwatarwa yana goyan bayan tsarin fitarwa na JSON da OpenMetrics (Prometheus). Ana bayar da misalan amfani da Ma'aunin Ma'auni na MicroProfile a cikin Tebu 7.

В aikin daga misalinmu Ana amfani da Ma'aunin Ma'auni don samar da awo na aikace-aikace. Don ƙarin bayani, duba littafin Quarkus Jagorar Ma'auni.

Tebur 7. Misalai na amfani da Ma'aunin Ma'auni na MicroProfile APIs.

Fasalolin Ma'auni na Ƙira
Description
misalai

@ ƙidaya

Yana nuna ma'auni mai ƙidayar adadin lokutan da aka kira abin da aka rubuta

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

@ConcurrentGauge

Yana nuna ma'aunin ma'auni wanda ke ƙidaya adadin kira na lokaci ɗaya zuwa abin da aka bayyana

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

@Gaba

Yana nuna firikwensin ma'aunin ma'auni wanda ke auna ƙimar abin da aka tantance

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

@Mita

Yana nuna firikwensin mita wanda ke lura da mitar kira na abin da aka tantance

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

tsarin awo

Bayanin da ke ɗauke da bayanai game da metadata lokacin da aka karɓi buƙatun shigar ko samar da awo

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

Lokaci

Yana nuna mai ƙidayar lokaci mai bin diddigin lokacin bayanin abu

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

Ma'aunin Ƙarshen Ƙarshen

Ma'aunin aikace-aikace Localhost:8080/metrics/application
Ma'auni na asali Localhost:8080/metrics/base
Ma'aunin mai siyarwa Localhost:8080/metrics/mai siyarwa
Duk ma'auni Localhost: 8080 / awo

Abokin Ragowar MicroProfile

Microservices galibi suna ba da madaidaitan wuraren ƙarewa waɗanda ke buƙatar API ɗin abokin ciniki daidai don aiki da su. Don amfani da wuraren ƙarshe na RESTful, masu haɓaka bazara yawanci suna amfani da RestTemplate. Quarkus yana ba da APIs na Abokin Hulɗa na MicroProfile don magance wannan matsalar, an ba da misalan amfani da su a cikin Tebur 8.

В aikin daga misalinmu Ana yin amfani da wuraren ƙarshen RESTful ta amfani da abokin ciniki Rest MicroProfile. Ana iya samun ƙarin bayani da misalai akan wannan batu a cikin littafin Quarkus Jagorar Abokin Ciniki.

Table 8. Misalai na amfani da MicroProfile Rest Client APIs.

Fasalolin Abokin Ciniki na MicroProfile
Description
misalai

@RegisterRestClient

Yana yin rijistar ƙirar Java da aka buga azaman abokin ciniki na REST

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

@Client

Alamar aiwatar da misalin nau'in mu'amalar abokin ciniki na REST

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

Kira

Yana kiran wurin ƙarshen REST

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

mp-rest/url

Yana ƙayyade ƙarshen ƙarshen REST

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

Sakamakon

A cikin wannan rukunin yanar gizon, wanda aka yi niyya da farko ga masu haɓaka lokacin bazara, mun ɗauki saurin duba yadda ake amfani da APIs na bazara tare da APIs MicroProfile a cikin Quarkus don haɓaka microservices na Java sannan a haɗa su zuwa lambar binary na asali wanda ke adana ɗaruruwan megabyte na RAM kuma ya ƙaddamar a ciki. al'amari na millise seconds.

Kamar yadda kuka riga kuka fahimta, ana iya samun ƙarin bayani game da tallafi ga Spring da MicroProfile APIs, da kuma sauran bayanai masu yawa masu amfani, a ciki Quarkus manuals.

source: www.habr.com

Add a comment