Quarkus څنګه مایکرو پروفایل او پسرلی سره یوځای کوي

ټولو ته سلام، دلته د کوارکوس لړۍ دریم پوسټ دی!

Quarkus څنګه مایکرو پروفایل او پسرلی سره یوځای کوي

کله چې د جاوا مایکرو خدماتو رامینځته کول ، ډیری وختونه داسې انګیرل کیږي Eclipse مایکرو پروفایل и د پسرلي بوټ جلا او خپلواک APIs دي. په ډیفالټ ډول، پروګرام کونکي د APIs کارولو ته لیوالتیا لري چې دوی دمخه کارول شوي، ځکه چې د نوي چوکاټونو او د چلولو برخو زده کول ډیر وخت نیسي. نن ورځ موږ به هڅه وکړو چې د ځینو مشهورونو پراختیا ساده کړو د پسرلي پراختیا کونکو لپاره مایکرو پروفایل API او تاسو ته وښایئ چې څنګه په ورته وخت کې د پسرلي API او نوي ګټور ب featuresې وکاروئ کوارکوس.

په یو څه نور تفصیل کې، موږ به لومړی په تفصیل سره وګورو چې څنګه Quarkus د پسرلي APIs ملاتړ کوي ترڅو د پسرلي پراختیا کونکو ته وښيي چې څنګه د دوی ورځني کار کې د مایکرو پروفایل API کاروي. بیا به موږ د مایکرو پروفایل APIs پوښي ، کوم چې د پسرلي پراختیا کونکو لپاره ګټور دي کله چې مایکرو خدمات رامینځته کوي.

ولې کوارکس؟ لومړی، دا ژوندی کوډینګ دی، دا دی، د مایکرو پروفایل API، پسرلي API او نورو جاوا APIs کې د هر ډول بدلونونو اتوماتیک بیا پورته کول، کوم چې یوازې د یوې کمانډ سره ترسره کیږي: mvn quarkus:dev. دوهم، په کې بحث شوی زموږ په مثال کې د شخص خدمت (کوم چې د پسرلي، مایکرو پروفایل، او JPA APIs څخه د اصلي GraalVM عکس په کارولو سره بائنری ته تالیف کوي) یوازې په 0.055 ثانیو کې پیل کیږي او د RESTful غوښتنلیک پای ټکی کې شاوخوا 90 MB رام (RSS) اخلي. سربیره پردې ، د دې تالیف پخپله یوازې د یوې کمانډ سره ترسره کیږي: mvn پیکج -Pnative.

موږ به د مایکرو پروفایل په اړه توضیحاتو ته لاړ نه شو، پرته له دې چې د پسرلي پراختیا کونکو سره مرسته وکړي چې پوه شي چې دوی څنګه کولی شي د پسرلي APIs د مایکرو پروفایل APIs سره په Quarkus کې وکاروي.

کانټینرونه او کبرنیټس

د دې مقالې ساده ساتلو لپاره، موږ به دلته یوازې د ملاتړ لوړ پوړ اړخونه پوښښ کړو. کوبنیټسځکه چې دا مهمه ده چې پوه شي. Quarkus د Kubernetes لپاره د جاوا سټیک په توګه موقعیت لري، دا د حافظې مصرف او د جاوا غوښتنلیکونو او خدماتو د پیل وخت کمولو لپاره ډیزاین شوی، او د پایلې په توګه، په کوربه کې د دوی کثافت ډیروي او ټول لګښتونه کموي.

کوارکس هم د اتومات تولید ملاتړ کوي د Kubernetes سرچینې او وړاندیزونه مشرتابه په Kubernetes او Red Hat OpenShift پلیټ فارمونو کې د ګمارلو لپاره. سربیره پردې، Quarkus په اتوماتيک ډول د Dockerfile.jvm (JVM بسته بندۍ) او Dockerfile.native (اصلي بائنری بسته بندي) فایلونه تولیدوي چې د کانټینرونو جوړولو لپاره اړین دي.

په نهایت کې ، د هدف ځای په ځای کولو چاپیریال په توګه په کوبرنیټس باندې تمرکز کولو سره ، کوارکس په هغه قضیو کې د جاوا چوکاټونه نه کاروي چیرې چې ورته فعالیت پخپله د کوبرنیټس پلیټ فارم په کچه پلي کیږي. جدول 1 د کبرنیټس او د پسرلي پراختیا کونکو لخوا کارول شوي د جاوا ځانګړي چوکاټونو ترمینځ د فعالې لیکنې نقشه وړاندې کوي.

جدول 1. د جاوا چوکاټونو او کبرنیټس تر مینځ د فعال لیکونو نقشه.

فعال
د پسرلي دودیز بوټان
کوبنیټس

د خدماتو کشف
د یوریکا
ډی

د سازونې
د پسرلي کلاوډ ترتیب
د نقشې ترتیب کول / رازونه

د بار توازن
ربن (د پیرودونکي اړخ)
خدمت، د نقل کنټرولر (د سرور اړخ)

د مثال څخه کوډ تالیف او چلول

پدې مقاله کې موږ ورته اشاره کوو د مثال پروژه، چیرې چې د پسرلي او مایکرو پروفایل APIs او حتی ورته جاوا ټولګي یوځای کارول کیږي. په دې مثال کې کوډ د کمانډ لاین څخه تالیف او پرمخ وړل کیدی شي، د جزیاتو لپاره د README.md فایل وګورئ.

د پسرلي چوکاټ APIs

د انحصار انجکشن

Quarkus د یو لړ لړۍ ملاتړ کوي شرایط او د انحصار انجکشن (CDI) APIs او د پسرلي انحصار انجیکشن (د پسرلي DI) APIs. که تاسو د مایکرو پروفایل سره کار کوئ، جاوا EE او جاکارتا EE، بیا تاسو دمخه د CDI سره ډیر آشنا یاست. له بلې خوا، د پسرلي پراختیا کونکي کولی شي د پسرلي DI API لپاره د Quarkus توسیع وکاروي ترڅو د پسرلي DI سره مطابقت ترلاسه کړي. د ملاتړ شوي پسرلي DI APIs کارولو مثالونه په 2 جدول کې ورکړل شوي.

В زموږ د مثال څخه پروژه د CDI او پسرلي انحصار انجیکشن دواړه کاروي. د دې موضوع په اړه د نورو معلوماتو او مثالونو لپاره، د Quarkus لارښود وګورئ د پسرلي DI لارښود.

جدول 2. د ملاتړ شوي پسرلي DI APIs کارولو مثالونه.

د پسرلي DI ځانګړتیاوې ملاتړ شوي
مثالونه

ساختماني انجکشن

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

د ساحې انجکشن
اتوماتیک شوی
ارزښت

@Autowired
@RestClient
SalutationRestClient salutationRestClient;

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

لوبیا
@ تشکیل

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

برخه

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

خدمت

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

   public String getPrefix() {
      return message;
   }
}

د ویب چوکاټ

د مایکرو پروفایل کارونکي به خوښ شي چې کوارکس د لومړني ویب برنامې ماډل په توګه د JAX-RS ، مایکرو پروفایل آرام پیرودونکي ، JSON-P ، او JSON-B ملاتړ کوي. د پسرلي پراختیا کونکي به د پسرلي ویب API لپاره د Quarkus وروستي ملاتړ څخه خوښ وي ، په ځانګړي توګه REST انٹرفیسونو کې. د پسرلي DI په څیر، د پسرلي ویب API ملاتړ اصلي هدف د پسرلي پراختیا کونکو ته وړتیا ورکول دي چې د مایکرو پروفایل APIs سره په ګډه د پسرلي ویب APIs وکاروي. د ملاتړ شوي پسرلي ویب APIs کارولو څرنګوالي مثالونه په 3 جدول کې وړاندې شوي، او د دې موضوع په اړه نور معلومات او مثالونه د Quarkus ټیوټوریل کې موندل کیدی شي. د پسرلي ویب لارښود.

جدول 3. د ملاتړ شوي پسرلي ویب APIs کارولو بیلګې.

ملاتړ شوي د پسرلي ویب ځانګړتیاوې
مثالونه

@RestController
@RequestMapping

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

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (جزوي)

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

د پسرلي ډاټا JPA

د مایکرو پروفایل کارونکي به هم ستاینه وکړي چې Quarkus د هایبرنیټ ORM په کارولو سره د JPA ملاتړ کوي. د پسرلي پراختیا کونکو لپاره هم ښه خبر شتون لري: کوارکس د پسرلي ډیټا JPA تشریحاتو او ډولونو ملاتړ کوي. د ملاتړ شوي پسرلي ډیټا JPA APIs کارولو مثالونه په 4 جدول کې ورکړل شوي.
В زموږ د مثال څخه پروژه د پسرلي ډاټا JPA APIs کارول کیږي او نور معلومات په Quarkus ټیوټوریل کې شتون لري د پسرلي ډاټا JPA لارښود.

جدول 4. د ملاتړ شوي پسرلي ډیټا JPA APIs کارولو مثالونه.

ملاتړ شوي د پسرلي ډاټا JPA ځانګړتیاوې
مثالونه

CrudRepository

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

ذخیره
JpaRepository
پاڼه او ترتیب کول

public class PersonRepository extends 

    Repository {

    Person save(Person entity);

    Optional findById(Person entity);
}

د ذخیرې ټوټې

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

ترلاسه شوي پوښتنې میتودونه

public interface PersonRepository extends CrudRepository {

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

    Boolean existsBookByYearOfBirthBetween(
            Integer start, Integer end);
}

د کارونکي لخوا تعریف شوي پوښتنې

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

د خطا زغم

د غلطۍ زغم جوړښتونه د کاسکیډینګ ناکامیو مخنیوي او د باور وړ مایکرو سرویس معمارۍ رامینځته کولو لپاره خورا مهم دي. د پسرلي پراختیا کونکي د ډیری کلونو لپاره د خطا زغم لپاره سرکټ بریکر کاروي. هیسټریکس. په هرصورت، Hystrix د اوږدې مودې لپاره تازه شوی نه دی، مګر د مایکرو پروفایل د غلطۍ زغم اوس په فعاله توګه وده کوي او د دې تر شا د څو کلونو تولید کارول لري. له همدې امله، په Quarkus کې د خدماتو د اعتبار د ښه کولو لپاره، سپارښتنه کیږي چې د مایکرو پروفایل د غلطۍ زغم APIs وکاروئ، چې مثالونه یې په 5 جدول کې کارول شوي دي. په دې اړه د نورو معلوماتو لپاره، د Quarkus لارښود وګورئ. د خطا زغم لارښود.

جدول 5. د ملاتړ شوي مایکرو پروفایل غلطی زغم APIs کارولو مثالونه.

د مایکرو پروفایل غلطی زغم ځانګړتیاوې
شرح
مثالونه

@Asynchronous

په جلا موضوع کې د منطق اجرا کول

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

@بلک هیډ

په ورته وخت کې د غوښتنو شمیر محدودول

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

@Circuitbreaker

د سمارټ ناکامي اداره کول او له ناکامیو څخه رغونه

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

@بېرته لوېدل

د ناکامۍ په صورت کې د بدیل منطق غوښتنه کول

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

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

Retry

د غوښتنې په ناکامۍ کې بیا هڅه وکړئ

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

وخت خلاص شو

د ناکامۍ کنټرول وخت پای

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

د چک کولو خدمات (خدمات روغتیا)

د Kubernetes پلیټ فارمونه د ځانګړو خدماتو په کارولو سره د کانټینرونو روغتیا څارنه کوي. د دې لپاره چې لاندې پلیټ فارم ته اجازه ورکړي چې خدمات وڅاري، د پسرلي پراختیا کونکي معمولا د دودیز روغتیا شاخص او د پسرلي بوټ فعالونکي کاروي. په Quarkus کې، دا د مایکرو پروفایل روغتیا په کارولو سره ترسره کیدی شي، کوم چې په ډیفالټ ډول د ژوندانه چک ترسره کوي، مګر په ورته وخت کې د ژوند او چمتووالي چک کولو لپاره ترتیب کیدی شي. د ملاتړ شوي مایکرو پروفایل روغتیا APIs کارولو څرنګوالي مثالونه په 6 جدول کې چمتو شوي ، او اضافي معلومات د Quarkus لارښود کې چمتو شوي. روغتیا لارښود.

جدول 6: د ملاتړ شوي مایکرو پروفایل روغتیا APIs کارولو مثالونه.

د مایکرو پروفایل روغتیا ځانګړتیاوې
شرح
مثالونه

@ژوندۍ

پلیټ فارم ریبوټ ناکام کانټینر شوي غوښتنلیکونه
پای ټکی:
کوربه: 8080/روغتیا/ژوند

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

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

@ چمتووالی

پلیټ فارم به کانټینر شوي غوښتنلیکونو ته ترافیک ونه لیږي که چمتو نه وي
پای ټکی:
کوربه: 8080/روغتیا/تیار

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

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

میټریکونه

غوښتنلیکونه د عملیاتي موخو (د فعالیت SLAs نظارت کولو لپاره) یا غیر عملیاتي اهدافو (سوداګرۍ SLAs) لپاره میټریکونه چمتو کوي. د پسرلي پراختیا کونکي د پسرلي بوټ اکټیوټر او مایکرومیټر په کارولو سره میټریک چمتو کوي. په بدل کې، Quarkus د مایکرو پروفایل میټریک کاروي ترڅو اساسی میټریکونه (JVM او عملیاتي سیسټم)، د پلورونکي میټریک (Quarkus)، او غوښتنلیک میټریک چمتو کړي. د مایکرو پروفایل میټریکس اړتیا لري چې پلي کول د JSON او OpenMetrics (Prometheus) محصول فارمیټونو ملاتړ کوي. د مایکرو پروفایل میټریکس API کارولو مثالونه په 7 جدول کې ورکړل شوي.

В زموږ د مثال څخه پروژه د مایکرو پروفایل میټریکونه د غوښتنلیک میټریک چمتو کولو لپاره کارول کیږي. د لا زیاتو معلوماتو لپاره، د Quarkus لارښود وګورئ د میټریک لارښود.

جدول 7. د مایکرو پروفایل میټریک APIs کارولو مثالونه.

د مایکرو پروفایل میټریک ځانګړتیاوې
شرح
مثالونه

@ شمېرل شوی

یو کاونټر کاونټر په ګوته کوي چې د یو تشریح شوي څیز د ویلو شمیره شمیري

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

@ConcurrentGauge

یو ګیج په ګوته کوي چې د یاد شوي اعتراض لپاره د سمو تلیفونونو شمیر حسابوي

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

@ګاج

د ګیج سینسر په ګوته کوي چې د تشریح شوي څیز ارزښت اندازه کوي

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

@میټر شوی

د میټر سینسر په ګوته کوي چې د تشریح شوي څیز د زنګ فریکونسۍ څارنه کوي

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

Metric

یو تشریح چې د میټاډاټا په اړه معلومات لري کله چې د میټریک داخلولو یا تولید لپاره غوښتنه ترلاسه کیږي

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

وخت تېر شو

یو ټایمر په ګوته کوي چې د تشریح شوي څیز موده تعقیبوي

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

د میټریک پای ټکي

د غوښتنلیک میټریکونه ځایی لوسټ:8080/میتریک/اپلیکیشن
بنسټیز میټریکونه ځایی لوسټ:8080/میټریک/بیس
د پلورونکي میټریکونه ځایی لوسټ:8080/میټریک/پلورونکی
ټول میترونه ځایی لوسټ:8080/میټریک

د مایکرو پروفایل آرام پیرودونکي

کوچني خدمتونه ډیری وختونه آرامۍ پای ټکي چمتو کوي چې د کار کولو لپاره ورته پیرودونکي APIs ته اړتیا لري. د RESTful پای ټکي کارولو لپاره ، د پسرلي پراختیا کونکي معمولا د ریسټ ټیمپلیټ کاروي. Quarkus د دې ستونزې د حل لپاره د مایکرو پروفایل آرام پیرودونکي APIs وړاندیز کوي، د کارولو مثالونه چې په 8 جدول کې ورکړل شوي.

В زموږ د مثال څخه پروژه د RESTful پای ټکی کارول د مایکرو پروفایل آرام پیرودونکي په کارولو سره ترسره کیږي. د دې موضوع په اړه نور معلومات او مثالونه د Quarkus لارښود کې موندلی شئ د آرام پیرودونکي لارښود.

جدول 8. د مایکرو پروفایل آرام پیرودونکي APIs کارولو مثالونه.

د مایکرو پروفایل آرام پیرودونکي ځانګړتیاوې
شرح
مثالونه

@RegisterRestClient

ټایپ شوی جاوا انٹرفیس د REST پیرودونکي په توګه ثبتوي

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

@RestClient

د ټایپ شوي REST پیرودونکي انٹرفیس مثال پلي کول په نښه کوي

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

بلنه

د REST پای ټکی ته زنګ ووهئ

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

mp-rest/url

د REST پای ټکی مشخص کوي

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

پایلې

په دې بلاګ کې، چې هدف یې د پسرلي پراختیا کونکو ته دی، موږ په کوارکس کې د مایکرو پروفایل APIs سره د پسرلي APIs کارولو څرنګوالی ته یو ګړندی کتنه وکړه ترڅو د جاوا مایکرو سرویسونو رامینځته کړي او بیا یې په اصلي بائنری کوډ کې تالیف کړي چې په سلګونو میګابایټ RAM خوندي کوي او په لانچ کې پیل کوي. د ملی ثانیو مسله.

لکه څنګه چې تاسو دمخه پوهیدلي ، د پسرلي او مایکرو پروفایل APIs لپاره د ملاتړ په اړه نور معلومات ، او همدارنګه ډیری نور ګټور معلومات په کې موندل کیدی شي د کوارکس لارښود.

سرچینه: www.habr.com

Add a comment