ټولو ته سلام، دلته د کوارکوس لړۍ دریم پوسټ دی!
کله چې د جاوا مایکرو خدماتو رامینځته کول ، ډیری وختونه داسې انګیرل کیږي
په یو څه نور تفصیل کې، موږ به لومړی په تفصیل سره وګورو چې څنګه Quarkus د پسرلي APIs ملاتړ کوي ترڅو د پسرلي پراختیا کونکو ته وښيي چې څنګه د دوی ورځني کار کې د مایکرو پروفایل API کاروي. بیا به موږ د مایکرو پروفایل APIs پوښي ، کوم چې د پسرلي پراختیا کونکو لپاره ګټور دي کله چې مایکرو خدمات رامینځته کوي.
ولې کوارکس؟ لومړی، دا ژوندی کوډینګ دی، دا دی، د مایکرو پروفایل API، پسرلي API او نورو جاوا APIs کې د هر ډول بدلونونو اتوماتیک بیا پورته کول، کوم چې یوازې د یوې کمانډ سره ترسره کیږي: mvn quarkus:dev. دوهم، په کې بحث شوی
موږ به د مایکرو پروفایل په اړه توضیحاتو ته لاړ نه شو، پرته له دې چې د پسرلي پراختیا کونکو سره مرسته وکړي چې پوه شي چې دوی څنګه کولی شي د پسرلي APIs د مایکرو پروفایل APIs سره په Quarkus کې وکاروي.
کانټینرونه او کبرنیټس
د دې مقالې ساده ساتلو لپاره، موږ به دلته یوازې د ملاتړ لوړ پوړ اړخونه پوښښ کړو.
کوارکس هم
په نهایت کې ، د هدف ځای په ځای کولو چاپیریال په توګه په کوبرنیټس باندې تمرکز کولو سره ، کوارکس په هغه قضیو کې د جاوا چوکاټونه نه کاروي چیرې چې ورته فعالیت پخپله د کوبرنیټس پلیټ فارم په کچه پلي کیږي. جدول 1 د کبرنیټس او د پسرلي پراختیا کونکو لخوا کارول شوي د جاوا ځانګړي چوکاټونو ترمینځ د فعالې لیکنې نقشه وړاندې کوي.
جدول 1. د جاوا چوکاټونو او کبرنیټس تر مینځ د فعال لیکونو نقشه.
فعال
د پسرلي دودیز بوټان
کوبنیټس
د خدماتو کشف
د یوریکا
ډی
د سازونې
د پسرلي کلاوډ ترتیب
د نقشې ترتیب کول / رازونه
د بار توازن
ربن (د پیرودونکي اړخ)
خدمت، د نقل کنټرولر (د سرور اړخ)
د مثال څخه کوډ تالیف او چلول
پدې مقاله کې موږ ورته اشاره کوو
د پسرلي چوکاټ APIs
د انحصار انجکشن
Quarkus د یو لړ لړۍ ملاتړ کوي
В
جدول 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 جدول کې ورکړل شوي.
В
جدول 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
د خطا زغم
د غلطۍ زغم جوړښتونه د کاسکیډینګ ناکامیو مخنیوي او د باور وړ مایکرو سرویس معمارۍ رامینځته کولو لپاره خورا مهم دي. د پسرلي پراختیا کونکي د ډیری کلونو لپاره د خطا زغم لپاره سرکټ بریکر کاروي.
جدول 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(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 جدول کې ورکړل شوي.
В
جدول 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
@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;
}
د میټریک پای ټکي
د غوښتنلیک میټریکونه
بنسټیز میټریکونه
د پلورونکي میټریکونه
ټول میترونه
د مایکرو پروفایل آرام پیرودونکي
کوچني خدمتونه ډیری وختونه آرامۍ پای ټکي چمتو کوي چې د کار کولو لپاره ورته پیرودونکي APIs ته اړتیا لري. د RESTful پای ټکي کارولو لپاره ، د پسرلي پراختیا کونکي معمولا د ریسټ ټیمپلیټ کاروي. Quarkus د دې ستونزې د حل لپاره د مایکرو پروفایل آرام پیرودونکي APIs وړاندیز کوي، د کارولو مثالونه چې په 8 جدول کې ورکړل شوي.
В
جدول 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