هيلو سڀني کي، هتي Quarkus سيريز ۾ ٽيون پوسٽ آهي!
جڏهن جاوا مائڪرو سروسز کي ترقي ڪندي، اهو اڪثر مڃيو ويندو آهي
ٿورڙي وڌيڪ تفصيل ۾، اسين سڀ کان پهريان اسڪوپ ۽ تفصيل تي نظر وجهنداسين ته ڪيئن Quarkus Spring APIs کي سپورٽ ڪري ٿو Spring ڊولپرز کي ڏيکاريو ته MicroProfile API کي سندن روزمرهه جي ڪم ۾ ڪيئن استعمال ڪجي. پوءِ اسين مائيڪرو پروفائيل APIs کي ڍڪينداسين، جيڪي اسپرنگ ڊولپرز لاءِ ڪارآمد آهن جڏهن مائڪرو سروسز ٺاهي رهيا آهن.
ڪوارڪس ڇو؟ سڀ کان پهريان، هي لائيو ڪوڊنگ آهي، يعني مائڪرو پروفائيل API، اسپرنگ API ۽ ٻين جاوا API ۾ ڪنهن به تبديليءَ جي خودڪار ٻيهر لوڊ ڪرڻ، جيڪا صرف هڪ حڪم سان ڪئي ويندي آهي: mvn quarkus:dev. ٻيو، ۾ بحث ڪيو ويو
اسان MicroProfile جي باري ۾ تفصيل ۾ نه وينداسين، سواءِ اسپرنگ ڊولپرز جي مدد ڪرڻ جي ته جيئن اهي Quarkus ۾ MicroProfile APIs سان Spring APIs ڪيئن استعمال ڪري سگھن.
ڪنٽينر ۽ ڪبرنيٽس
ھن مضمون کي سادو رکڻ لاءِ، اسين ھتي صرف مدد جي اعليٰ سطحي حصن کي ڍڪينداسين.
ڪوارڪس پڻ
آخرڪار، Kubernetes تي ڌيان ڏيڻ سان ٽارگيٽ ڊيپلائيمينٽ ماحول جي طور تي، Quarkus جاوا فريم ورڪ استعمال نه ڪندو آهي ڪيسن ۾ جتي ساڳي ڪارڪردگي خود ڪبرنيٽس پليٽ فارم جي سطح تي لاڳو ٿئي ٿي. جدول 1 ڪبرنيٽس ۽ اسپرنگ ڊولپرز پاران استعمال ڪيل عام جاوا فريم ورڪ جي وچ ۾ فنڪشنل خط و ڪتابت جو نقشو مهيا ڪري ٿو.
جدول 1. جاوا فريم ورڪ ۽ ڪبرنيٽس جي وچ ۾ فنڪشنل خط و ڪتابت جو نقشو.
فنڪشنل
روايتي بهار بوٽ
ڪوبنيٿس
سروس دريافت
Eureka
DNS
جي تشڪيل
اسپرنگ Cloud Config
ٺاھ جوڙ نقشا / راز
توازن کي وڌايو
ربن (ڪلائنٽ طرف)
خدمت، نقل ڪنٽرولر (سرور طرف)
مثال مان ڪوڊ گڏ ڪرڻ ۽ هلائڻ
هن آرٽيڪل ۾ اسان جو حوالو ڏيون ٿا
اسپرنگ فريم ورڪ APIs
انحصار ڪندڙ انجيڪشن
Quarkus هڪ حد جي حمايت ڪري ٿو
В
جدول 2. سپورٽ ٿيل اسپرنگ DI APIs استعمال ڪرڻ جا مثال.
سپورٽ اسپرنگ ڊي خاصيتون
مثال
تعمير ڪندڙ انجڻ
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;
}
}
ويب فريم ورڪ
MicroProfile استعمال ڪندڙ پسند ڪندا ته Quarkus JAX-RS، MicroProfile Rest Client، JSON-P، ۽ JSON-B کي بنيادي ويب پروگرامنگ ماڊل طور سپورٽ ڪري ٿو. اسپرنگ ڊولپرز اسپرنگ ويب API لاءِ Quarkus جي تازي مدد سان خوش ٿيندا، خاص ڪري REST انٽرفيس ۾. Spring DI وانگر، Spring Web API سپورٽ جو بنيادي مقصد Spring ڊولپرز کي اسپرنگ ويب APIs استعمال ڪرڻ جي قابل بنائڻ آھي MicroProfile APIs سان. سپورٽ ٿيل اسپرنگ ويب APIs کي ڪيئن استعمال ڪجي ان جا مثال جدول 3 ۾ مهيا ڪيا ويا آهن، ۽ ان موضوع تي وڌيڪ معلومات ۽ مثال ملي سگھن ٿا Quarkus tutorial ۾.
ٽيبل 3. سپورٽ ٿيل اسپرنگ ويب APIs استعمال ڪرڻ جا مثال.
سپورٽ اسپرنگ ويب خاصيتون
مثال
@ ريسٽ ڪنٽرولر
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@ پوسٽ ميپنگ
@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
MicroProfile استعمال ڪندڙ ان ڳالهه جي به تعريف ڪندا ته Quarkus Hibernate 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);
}
MicroProfile 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(); //...
}
@Fallback
ناڪامي جي صورت ۾ متبادل منطق کي سڏيو
@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 پليٽ فارم خاص خدمتون استعمال ڪندي ڪنٽينرز جي صحت جي نگراني ڪن ٿا. هيٺئين پليٽ فارم کي اجازت ڏيڻ لاءِ خدمتن جي نگراني ڪرڻ لاءِ، اسپرنگ ڊولپر عام طور تي استعمال ڪن ٿا ڪسٽم HealthIndicator ۽ Spring Boot Actuator. Quarkus ۾، اهو MicroProfile Health استعمال ڪندي ڪري سگهجي ٿو، جيڪو ڊفالٽ طور تي جانداريءَ جي چڪاس ڪندو آهي، پر ان کي ترتيب ڏئي سگهجي ٿو ته جيئن هڪ ئي وقت جانداريءَ ۽ تيارگي کي جانچي سگهجي. معاون MicroProfile Health APIs کي ڪيئن استعمال ڪجي جا مثال جدول 6 ۾ مهيا ڪيا ويا آهن، ۽ اضافي معلومات Quarkus Manual ۾ مهيا ڪئي وئي آهي.
جدول 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 MicroProfile Metrics استعمال ڪري ٿو بيس لائين ميٽرڪس (JVM ۽ آپريٽنگ سسٽم)، وينڊر ميٽرڪس (Quarkus)، ۽ ايپليڪيشن ميٽرڪس مهيا ڪرڻ لاءِ. MicroProfile Metrics جي ضرورت آهي ته عمل درآمد JSON ۽ OpenMetrics (Prometheus) آئوٽ پٽ فارميٽ کي سپورٽ ڪري. MicroProfile Metrics API استعمال ڪرڻ جا مثال جدول 7 ۾ ڏنل آھن.
В
ٽيبل 7. استعمال ڪرڻ جا مثال MicroProfile Metrics APIs.
MicroProfile Metrics خاصيتون
بيان
مثال
@ شمار ٿيل
هڪ ڳڻپيوڪر ڪائونٽر کي ظاهر ڪري ٿو جيڪو شمار ڪري ٿو ڪيترا ڀيرا هڪ بيان ڪيل اعتراض کي سڏيو ويو آهي
@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;
}
Metrics Endpoints
ايپليڪيشن جي ماپ
بنيادي ماپون
وينڊرز جي ماپ
سڀ ماپ
مائڪرو پروفائل باقي ڪلائنٽ
Microservices اڪثر مهيا ڪن ٿيون RESTful endpoints جن کي ڪم ڪرڻ لاءِ لاڳاپيل ڪلائنٽ APIs جي ضرورت هوندي آهي. RESTful endpoints استعمال ڪرڻ لاءِ، Spring ڊولپر عام طور تي RestTemplate استعمال ڪندا آهن. Quarkus هن مسئلي کي حل ڪرڻ لاءِ MicroProfile Rest Client APIs پيش ڪري ٿو، جن جا مثال ٽيبل 8 ۾ ڏنل آهن.
В
ٽيبل 8. مائڪرو پروفائيل ريسٽ ڪلائنٽ APIs استعمال ڪرڻ جا مثال.
مائڪرو پروفائل باقي ڪلائنٽ خاصيتون
بيان
مثال
@RegisterRestClient
هڪ ٽائپ ڪيل جاوا انٽرفيس کي رجسٽر ڪري ٿو REST ڪلائنٽ طور
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@ ريسٽ ڪلائنٽ
ٽائيپ ٿيل 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 کي استعمال ڪيو وڃي MicroProfile APIs سان Quarkus ۾ Java microservices کي ڊولپ ڪرڻ لاءِ ۽ پوءِ انهن کي مقامي بائنري ڪوڊ ۾ مرتب ڪيو جيڪو سوين ميگا بائيٽ جي ريم کي بچائي ٿو ۽ ان ۾ لانچ ٿئي ٿو. ملي سيڪنڊن جو معاملو.
جيئن توهان اڳ ۾ ئي سمجهي چڪا آهيو، اسپرنگ ۽ مائڪرو پروفائيل APIs جي سپورٽ بابت وڌيڪ معلومات، انهي سان گڏ ڪيتريون ئي ٻيون مفيد معلومات، ڳولي سگهجن ٿيون.
جو ذريعو: www.habr.com