Sidee Quarkus isugu daraa MicroProfile iyo Guga

Waad salaaman tihiin dhammaan, waa kan boostada saddexaad ee taxanaha Quarkus!

Sidee Quarkus isugu daraa MicroProfile iyo Guga

Marka la horumarinayo adeegyada yaryar ee Java, waxaa badanaa la rumeysan yahay in Eclipse MicroProfile ΠΈ Kabaha guga waa APIs gaar ah oo madax-bannaan. Sida caadiga ah, barnaamij-bixiyeyaashu waxay u janjeeraan inay adeegsadaan API-yadii ay hore u isticmaali jireen, maadaama barashada qaab-dhismeedka cusub iyo qaybaha runtime ay qaadato waqti badan. Maanta waxaan isku dayi doonaa inaan fududeyno horumarinta qaar caan ah MicroProfile API ee horumariyayaasha guga oo ku tuso sida isku mar loo isticmaalo guga API iyo astaamo cusub oo faa'iido leh quruus.

In yar oo faahfaahsan, waxaan marka hore eegi doonaa baaxadda iyo faahfaahinta sida Quarkus u taageerto API-yada gu'ga si loo tuso horumariyayaasha gu'ga sida loogu isticmaalo MicroProfile API shaqadooda maalinlaha ah. Kadib waxaan dabooli doonaa MicroProfile APIs, kuwaas oo faa'iido u leh horumariyeyaasha gu'ga marka la abuurayo adeeg-yaraha.

Waa maxay sababta Quarkus? Marka hore, kani waa codayn toos ah, taas oo ah, dib u dejinta tooska ah ee isbeddel kasta oo ku yimaadda MicroProfile API, Spring API iyo Java APIs kale, kaas oo lagu sameeyo hal amar oo keliya: mvn quarkus:dev. Marka labaad, laga wada hadlay in tusaale ahaan Adeegga Qofka (kaas oo ka soo uruuriya Spring, MicroProfile, iyo JPA APIs ee binary isticmaalaya sawirka asalka ah ee GraalVM) wuxuu ku bilaabmaa 0.055 ilbiriqsi oo kaliya wuxuuna qaadanayaa ilaa 90 MB RAM (RSS) dhamaadka codsiga RESTful. Intaa waxaa dheer, isku-dubariddeeda lafteeda waxaa lagu sameeyaa hal amar: mvn pack -Pnative.

Ma aadi doono faahfaahin ku saabsan MicroProfile, aan ka ahayn in aan ka caawino horumariyayaasha gu'ga inay fahmaan sida ay u isticmaali karaan API-yada gu'ga ee MicroProfile APIs gudaha Quarkus.

Konteenarada iyo Kubernetes

Si maqaalkan loo fududeeyo, waxaanu halkan ku dabooli doonaa oo kaliya dhinacyada heerka sare ah ee taageerada. Kubureteska, sababtoo ah waa muhiim in la fahmo. Quarkus waxaa loo dhigaa sidii xirmo Java ah oo loogu talagalay Kubernetes, waxaa loogu talagalay in lagu yareeyo isticmaalka xusuusta iyo waqtiga bilowga codsiyada iyo adeegyada Java, iyo, natiijada, kordhinta cufnaanta martigeliyaha waxayna yareeyaan kharashyada guud.

Quarkus sidoo kale waxay taageertaa abuurista auto Khayraadka Kubernetes iyo soo jeedinta hagayaal si loo geeyo Kubernetes iyo Koofiyada Cas OpenShift. Intaa waxaa dheer, Quarkus wuxuu si toos ah u soo saaraa Dockerfile.jvm (baakada JVM) iyo Dockerfile.native (baakada binary-ga hooyo) ee loo baahan yahay si loo abuuro weel.

Ugu dambeyntii, adoo diiradda saaraya Kubernetes oo ah deegaanka la beegsanayo, Quarkus ma isticmaalo qaababka Java ee kiisaska halka shaqeynta la midka ah lagu fuliyo heerka Kubernetes platform laftiisa. Jadwalka 1 wuxuu bixiyaa khariidad ku saabsan waraaqaha shaqada ee u dhexeeya Kubernetes iyo qaab-dhismeedka Java caadiga ah ee ay adeegsadaan horumariyeyaasha gu'ga.

Shaxda 1. Khariidadda waraaqaha shaqada ee u dhexeeya qaab-dhismeedka Java iyo Kubernetes.

Waxqabadka
Kabaha Guga ee Dhaqanka
Kubureteska

Helitaanka adeegga
Eureka
DNS

qaabeynta
Guga Cloud Config
Khariidadaha/Sirta habee

Isu dheellitirka xamuulka
Ribbon (dhinaca macaamiisha)
Adeegga, Xakamaynta Ku-noqoshada (dhinaca adeegaha)

Ururinta iyo socodsiinta koodka tusaalaha

Maqaalkan waxaan tixraacaynaa tusaale ahaan mashruuca, halkaas oo API-yada Spring iyo MicroProfile iyo xitaa isla fasalka Java la wada isticmaalo. Koodhka tusaalahan waa la soo ururin karaa oo laga socodsiin karaa khadka taliska, ka eeg faahfaahinta faylka README.md.

Qaabka Guga APIs

Ku-tiirsanaanta

Quarkus wuxuu taageeraa noocyo kala duwan oo ah Qodobbada iyo Ku-tiirsanaanta Ku-tiirsanaanta (CDI) APIs iyo Ku-tiirsanaanta Guga (Guga DI) APIs. Haddii aad la shaqaynayso MicroProfile, Java EE iyo Jakarta EE, ka dib waxaad horeyba u taqaanay CDI. Dhanka kale, horumariyayaasha gu'ga waxay isticmaali karaan Quarkus Extension ee Gu'ga DI API si ay u gaadhaan waafaqsanaanta gu'ga DI. Tusaalooyinka isticmaalka gu'ga DI APIs ee la taageeray waxa lagu bixiyay shaxda 2.

Π’ mashruuca tusaale ahaan Waxay isticmaashaa CDI iyo Cirridka Ku-tiirsanaanta Guga labadaba. Macluumaad dheeraad ah iyo tusaaleyaal mawduucan ku saabsan waxaa laga heli karaa hagaha Quarkus ee la yiraahdo Guga DI Hagaha.

Shaxda 2. Tusaalooyinka isticmaalka API-yada gu'ga ee la taageeray.

Tilmaamaha Guga DI ee la taageeray
tusaalooyin

Duritaan dhisme

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

Cirbadda Goobta
Si toos ah
Qiimaha

@Autowired
@RestClient
SalutationRestClient salutationRestClient;

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

bean
@Qaabka

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

Qeybta

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

Qaab dhismeedka shabakadda

Isticmaalayaasha MicroProfile waxay jeclaan doonaan in Quarkus ay taageerto JAX-RS, Macmiilka Nasashada MicroProfile, JSON-P, iyo JSON-B oo ah moodelka barnaamijka aasaasiga ah ee shabakada. Soosaarayaasha gu'ga ayaa ku farxi doona taageerada dhawaanta Quarkus ee Guga Web API, gaar ahaan isku xidhka REST. Si la mid ah Gu'ga DI, hadafka ugu weyn ee taageerada Gu'ga Shabakadda API waa in la suurtogeliyo horumariyeyaasha gu'ga inay isticmaalaan API-yada Webka Gu'ga iyadoo lala kaashanayo MicroProfile APIs. Tusaalooyinka sida loo isticmaalo API-yada ay taageerto Guga Websaydhka ayaa lagu bixiyay shaxda 3, iyo macluumaad dheeraad ah iyo tusaalooyin mawduucan ku saabsan waxa laga heli karaa casharka Quarkus ee la yidhaahdo Hagaha Shabakadda Guga.

Shaxda 3. Tusaalooyinka isticmaalka API-yada Shabakadda Guga ee la taageero.

Tilmaamaha Shabakadda Gu'ga ee la taageeray
tusaalooyin

@RestController
@Codsiga Khariidadda

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

@Hel Khariidadda
@Khariidadda Kadib
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@Codsi madaxeed
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (qayb)

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

Xogta gu'ga JPA

Isticmaalayaasha MicroProfile waxay sidoo kale qadarin doonaan in Quarkus ay taageerto JPA iyadoo la adeegsanayo Hibernate ORM. Waxa kale oo jira war wanaagsan oo loogu talagalay horumariyeyaasha gu'ga: Quarkus wuxuu taageeraa faafaahinta iyo noocyada xogta gu'ga ee caadiga ah. Tusaalooyinka isticmaalka xogta gu'ga ee JPA API-yada ee la taageeray waxa lagu bixiyay shaxda 4.
Π’ mashruuca tusaale ahaan Xogta gu'ga JPA API-yada ayaa la isticmaalaa oo macluumaad dheeraad ah ayaa laga helayaa casharrada Quarkus ee la yiraahdo Xogta Guga ee JPA Hagaha.

Shaxda 4. Tusaalooyinka isticmaalka xogta gu'ga ee la taageeray APIs.

Tilmaamaha Xogta Guga ee la Taageeray ee JPA
tusaalooyin

Kaydka Crud

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

Repository
JpaRepository
Bakhaarka Bogga iyo Kala-soocidda

public class PersonRepository extends 

    Repository {

    Person save(Person entity);

    Optional findById(Person entity);
}

Jajabyada Kaydka

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

Hababka weydiinta ee la soo qaatay

public interface PersonRepository extends CrudRepository {

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

    Boolean existsBookByYearOfBirthBetween(
            Integer start, Integer end);
}

Weydiimaha isticmaalaha-qeexay

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

Dulqaadka qaladka

Dhismayaasha u-dulqaadashada cilladaha ayaa aad muhiim ugu ah ka hortagga guul-darrooyinka iyo abuurista qaab-dhismeedyo adeeg-yar oo la isku halayn karo. Soosaarayaasha guga ayaa sanado badan u isticmaalayay wareegtada-jareyaasha dulqaadka cilada. Hystrix. Si kastaba ha ahaatee, Hystrix lama cusboonaysiin wakhti dheer, laakiin Dulqaadashada Ciladda MicroProfile ayaa hadda si firfircoon u kobcaysa waxayna leedahay dhowr sano oo isticmaalka wax soo saarka gadaashiisa. Sidaa darteed, si loo hagaajiyo isku halaynta adeegyada Quarkus, waxaa lagu talinayaa in la isticmaalo MicroProfile Fault Tolerance APIs, tusaaleyaal kuwaas oo lagu isticmaalo Shaxda 5. Macluumaad dheeraad ah oo arrintan ku saabsan, eeg buug-gacmeedka Quarkus Tilmaamaha Dulqaadashada Ciladda.

Shaxda 5. Tusaalooyinka isticmaalka APIs ee Dulqaadashada Cillada ee Profile ee la taageeray.

Tilmaamaha Dulqaadashada Ciladda MicroProfile
Description
tusaalooyin

@Asynchronous

Ku-fulinta macquulka ah ee dun gaar ah

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

@Bulkhead

Xaddid tirada codsiyada isku mar ah

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

@CircuitBreaker

Maareynta fashilka smart iyo ka soo kabashada guul darrooyinka

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

@Dib u dhac

U yeerida caqli-gal kale haddii ay dhacdo guuldarro

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

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

Kuceli

Isku day inaad ku guul dareysato codsiga

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

Waqti go'an

Wakhtiga xakamaynta fashilka

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

Adeegyada hubinta (Adeegyada Caafimaadka)

Goobaha Kubernetes waxay kormeeraan caafimaadka weelasha iyagoo isticmaalaya adeegyo gaar ah. Si loogu oggolaado goobta hoose inay la socoto adeegyada, horumariyeyasha gu'ga waxay caadi ahaan adeegsadaan tilmaame caafimaad oo caadadii ah iyo Actuator Boot Guga. Gudaha Quarkus, tan waxaa lagu samayn karaa iyada oo la adeegsanayo MicroProfile Health, kaas oo si caadi ah u sameeya hubinta nolosha, laakiin waxaa loo habeyn karaa si isku mar ah loo hubiyo noolaanshaha iyo diyaarsanaanta. Tusaalooyinka sida loo isticmaalo MicroProfile Health APIs ee la taageeray ayaa lagu bixiyay shaxda 6, iyo macluumaad dheeraad ah ayaa lagu bixiyay buug-gacmeedka Quarkus Hagaha Caafimaadka.

Shaxda 6: Tusaalooyinka isticmaalka ee API-yada Caafimaadka MicroProfile ee la taageeray.

Tilmaamaha Caafimaadka MicroProfile
Description
tusaalooyin

@Nolol

Madalku wuxuu dib u bilaabayaa codsiyada weelaysan ee fashilmay
Dhamaadka:
martigeliyaha: 8080 / caafimaadka / nool

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

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

@diyaargarowga

Madalku uma diri doonto taraafikada codsiyada weel ku jira haddii aanay diyaar ahayn
Dhamaadka:
martigeliyaha: 8080 / caafimaadka / diyaar ah

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

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

Metrics

Codsiyada waxay bixiyaan cabbirro ujeeddooyin hawlgal ah (si loola socdo waxqabadka SLAs) ama ujeeddooyin aan shaqaynayn (SLAs ganacsi). Soosaarayaasha gu'ga waxay bixiyaan cabbiro isticmaalaya Spring Boot Actuator iyo Micrometer. Dhanka kale, Quarkus waxay isticmaashaa Metrics MicroProfile si ay u bixiso cabbirada aasaasiga ah (JVM iyo nidaamka hawlgalka), cabbirada iibiyaha (Quarkus), iyo cabbirada codsiga. Metrics MicroProfile waxay u baahan tahay in hirgelintu ay taageerto JSON iyo OpenMetrics (Prometheus) qaababka wax soo saarka. Tusaalooyinka isticmaalka MicroProfile Metrics API waxa lagu bixiyay shaxda 7.

Π’ mashruuca tusaale ahaan Metrics MicroProfile waxaa loo isticmaalaa in lagu bixiyo cabbirada codsiga. Wixii macluumaad dheeraad ah, eeg buug-gacmeedka Quarkus Tilmaamaha Metrics.

Shaxda 7. Tusaalooyinka isticmaalka MicroProfile Metrics APIs.

Tilmaamaha Metrics MicroProfile
Description
tusaalooyin

@waa la tiriyey

Waxay tilmaamaysaa counter counter-ta tiriya inta jeer ee shay qeexan la wacay

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

@ConcurrentGauge

Waxa ay tilmaamaysaa cabirka tiriya tirada wicitaanada isku xigta ee shay la tilmaamay

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

@Qaar

Waxay tilmaamaysaa dareeraha cabbiraadda ee cabbira qiimaha shay la sharraxay

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

@Metered

Waxay tilmaamaysaa dareeraha mitirka ee kormeeraya inta jeer ee wacitaanka shay la sharraxay

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

Metric

Faahfaahin ka kooban macluumaadka ku saabsan xogta badan marka la helo codsi ah in la galo ama la soo saaro mitir

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

Waqti

Waxay tuseysaa saacada dabagalka muddada shay la sharraxay

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

Metrics Endpoints

Hababka codsiga localhost:8080/metrics/application
Qiyaasaha aasaasiga ah localhost:8080/metrics/saldhig
Qiyaasaha iibiyaha localhost:8080/metrics/iibiyaha
Dhammaan cabbirada localhost:8080/metrics

Macmiilka Nasashada MicroProfile

Microservices waxay inta badan bixiyaan bar-dhammaadka RESTful oo u baahan API-yada macmiilka u dhigma si ay ula shaqeeyaan. Si loo isticmaalo dhibcaha dhamaadka RESTful, horumariyayaasha gu'ga waxay caadi ahaan isticmaalaan RestTemplate. Quarkus wuxuu bixiyaa MicroProfile Rest Client APIs si loo xalliyo dhibaatadan, tusaaleyaal adeegsigoodu waxay ku qoran yihiin Shaxda 8.

Π’ mashruuca tusaale ahaan Isticmaalka dhibcaha dhamaadka RESTful waxaa lagu sameeyaa iyada oo la adeegsanayo Macmiilka Nasashada MicroProfile. Macluumaad dheeraad ah iyo tusaaleyaal mawduucan ku saabsan waxaa laga heli karaa buug-gacmeedka Quarkus Hagaha Macmiilka Nasashada.

Shaxda 8. Tusaalooyinka isticmaalka MicroProfile Rest Client APIs.

Tilmaamaha Macmiilka Nasashada MicroProfile
Description
tusaalooyin

@RegisterRestClient

Wuxuu u diiwangeliyaa interface-ka Java teebaysan sidii macmiil REST ah

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

@Client

Waxay calaamadisaa hirgelinta tusaale ahaan is-dhexgalka macmiilka ee REST oo la qoray

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

Qaylinta

Wuxuu wacaa barta dhamaadka REST

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

mp-rest/url

Waxay qeexaysaa barta dhamaadka REST

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

Natiijooyinka

Balooggan, oo ugu horrayn loogu talagalay horumariyeyaasha gu'ga, waxaanu si dhakhso ah u eegnay sida loo isticmaalo API-yada gu'ga ee MicroProfile APIs ee Quarkus si loo horumariyo adeegyada yaryar ee Java ka dibna lagu ururiyo koodka binary code-ka asalka ah kaas oo badbaadiya boqolaal megabyte oo RAM ah oo bilaabaya in arrin millise seconds.

Sidaad horeba u fahantay, macluumaad badan oo ku saabsan taageerada Guga iyo MicroProfile APIs, iyo sidoo kale macluumaad kale oo badan oo faa'iido leh, ayaa laga heli karaa Buugaag Quarkus.

Source: www.habr.com

Add a comment