ڪئين Quarkus MicroProfile ۽ Spring کي گڏ ڪري ٿو

هيلو سڀني کي، هتي Quarkus سيريز ۾ ٽيون پوسٽ آهي!

ڪئين Quarkus MicroProfile ۽ Spring کي گڏ ڪري ٿو

جڏهن جاوا مائڪرو سروسز کي ترقي ڪندي، اهو اڪثر مڃيو ويندو آهي گرپس مائڪرو پروفائيل и اسپرنگ بوٽ الڳ الڳ ۽ آزاد APIs آهن. ڊفالٽ طور، پروگرامر استعمال ڪن ٿا APIs جيڪي اهي اڳ ۾ ئي استعمال ڪيا ويا آهن، ڇاڪاڻ ته نئين فريم ورڪ ۽ رن ٽائم اجزاء کي سکڻ ۾ گهڻو وقت لڳندو آهي. اڄ اسان ڪجهه مشهور جي ترقي کي آسان ڪرڻ جي ڪوشش ڪنداسين بهار ڊولپرز لاءِ مائڪرو پروفائيل API ۽ توهان کي ڏيکاريو ته ڪيئن هڪ ئي وقت Spring API ۽ نوان ڪارآمد خاصيتون استعمال ڪجي ڪرڪشس.

ٿورڙي وڌيڪ تفصيل ۾، اسين سڀ کان پهريان اسڪوپ ۽ تفصيل تي نظر وجهنداسين ته ڪيئن Quarkus Spring APIs کي سپورٽ ڪري ٿو Spring ڊولپرز کي ڏيکاريو ته MicroProfile API کي سندن روزمرهه جي ڪم ۾ ڪيئن استعمال ڪجي. پوءِ اسين مائيڪرو پروفائيل APIs کي ڍڪينداسين، جيڪي اسپرنگ ڊولپرز لاءِ ڪارآمد آهن جڏهن مائڪرو سروسز ٺاهي رهيا آهن.

ڪوارڪس ڇو؟ سڀ کان پهريان، هي لائيو ڪوڊنگ آهي، يعني مائڪرو پروفائيل API، اسپرنگ API ۽ ٻين جاوا API ۾ ڪنهن به تبديليءَ جي خودڪار ٻيهر لوڊ ڪرڻ، جيڪا صرف هڪ حڪم سان ڪئي ويندي آهي: mvn quarkus:dev. ٻيو، ۾ بحث ڪيو ويو اسان جي مثال ۾ پرسن سروس (جيڪا اسپرنگ، مائڪرو پروفائيل، ۽ JPA APIs مان گڏ ڪري ٿي بائنري ۾ GraalVM تصوير استعمال ڪندي) صرف 0.055 سيڪنڊن ۾ شروع ٿئي ٿي ۽ RESTful ايپليڪيشن جي آخري پوائنٽ تي اٽڪل 90 MB ريم (RSS) وٺي ٿي. ان کان علاوه، ان جي تاليف پاڻ کي صرف هڪ حڪم سان ڪيو ويو آهي: mvn package -Pnative.

اسان MicroProfile جي باري ۾ تفصيل ۾ نه وينداسين، سواءِ اسپرنگ ڊولپرز جي مدد ڪرڻ جي ته جيئن اهي Quarkus ۾ MicroProfile APIs سان Spring APIs ڪيئن استعمال ڪري سگھن.

ڪنٽينر ۽ ڪبرنيٽس

ھن مضمون کي سادو رکڻ لاءِ، اسين ھتي صرف مدد جي اعليٰ سطحي حصن کي ڍڪينداسين. ڪوبنيٿس، ڇاڪاڻ ته اهو سمجهڻ ضروري آهي. Quarkus، Kubernetes لاءِ جاوا اسٽيڪ جي حيثيت ۾ رکيل آهي، اها ميموري جي استعمال ۽ جاوا ايپليڪيشنن ۽ خدمتن جي شروعاتي وقت کي گهٽائڻ لاءِ ٺهيل آهي، ۽ نتيجي طور، ميزبان تي انهن جي کثافت وڌائي ۽ مجموعي خرچن کي گھٽائي.

ڪوارڪس پڻ خودڪار نسل کي سپورٽ ڪري ٿو Kubernetes وسيلن ۽ آڇون قيادت Kubernetes ۽ Red Hat OpenShift پليٽ فارمن تي مقرري لاء. ان کان علاوه، Quarkus پاڻمرادو ٺاهي ٿو Dockerfile.jvm (JVM پيڪنگنگ) ۽ Dockerfile.native (ملي بائنري پيڪنگنگ) فائلون جيڪي ڪنٽينر ٺاهڻ لاءِ گهربل آهن.

آخرڪار، Kubernetes تي ڌيان ڏيڻ سان ٽارگيٽ ڊيپلائيمينٽ ماحول جي طور تي، Quarkus جاوا فريم ورڪ استعمال نه ڪندو آهي ڪيسن ۾ جتي ساڳي ڪارڪردگي خود ڪبرنيٽس پليٽ فارم جي سطح تي لاڳو ٿئي ٿي. جدول 1 ڪبرنيٽس ۽ اسپرنگ ڊولپرز پاران استعمال ڪيل عام جاوا فريم ورڪ جي وچ ۾ فنڪشنل خط و ڪتابت جو نقشو مهيا ڪري ٿو.

جدول 1. جاوا فريم ورڪ ۽ ڪبرنيٽس جي وچ ۾ فنڪشنل خط و ڪتابت جو نقشو.

فنڪشنل
روايتي بهار بوٽ
ڪوبنيٿس

سروس دريافت
Eureka
DNS

جي تشڪيل
اسپرنگ Cloud Config
ٺاھ جوڙ نقشا / راز

توازن کي وڌايو
ربن (ڪلائنٽ طرف)
خدمت، نقل ڪنٽرولر (سرور طرف)

مثال مان ڪوڊ گڏ ڪرڻ ۽ هلائڻ

هن آرٽيڪل ۾ اسان جو حوالو ڏيون ٿا مثال پروجيڪٽ، جتي اسپرنگ ۽ مائڪرو پروفائيل APIs ۽ اڃا به ساڳيو جاوا ڪلاس گڏ استعمال ڪيا ويندا آهن. ھن مثال ۾ ڪوڊ مرتب ڪري سگھجي ٿو ۽ ڪمانڊ لائن مان هلائي سگھجي ٿو، تفصيل لاءِ README.md فائل ڏسو.

اسپرنگ فريم ورڪ APIs

انحصار ڪندڙ انجيڪشن

Quarkus هڪ حد جي حمايت ڪري ٿو حوالا ۽ انحصار انجڻ (CDI) APIs ۽ اسپرنگ انحصار انجيڪشن (اسپرنگ ڊي آئي) APIs. جيڪڏهن توهان MicroProfile سان ڪم ڪري رهيا آهيو، جاوا EE ۽ جڪارتا EE، پوءِ توھان اڳ ۾ ئي CDI سان تمام گھڻو واقف آھيو. ٻئي طرف، اسپرنگ ڊولپر استعمال ڪري سگھن ٿا Quarkus Extension for Spring DI API لاءِ Spring DI سان مطابقت حاصل ڪرڻ لاءِ. سپورٽ ٿيل Spring DI APIs استعمال ڪرڻ جا مثال ٽيبل 2 ۾ ڏنل آهن.

В اسان جي مثال مان پروجيڪٽ سي ڊي آءِ ۽ اسپرنگ انحصاري انجيڪشن ٻئي استعمال ڪري ٿو. هن موضوع تي وڌيڪ معلومات ۽ مثالن لاءِ، ڏسو Quarkus Guide سڏيو وڃي ٿو اسپرنگ ڊي گائيڊ.

جدول 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 ۾ ڏنل آھن.
В اسان جي مثال مان پروجيڪٽ اسپرنگ ڊيٽا JPA APIs استعمال ڪيا ويا آهن ۽ وڌيڪ معلومات موجود آهي Quarkus tutorial ۾ بهار جي ڊيٽا 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);
}

MicroProfile APIs

عيب رواداري

فالٽ رواداري تعميرات تمام ضروري آهن ته جيئن ڇڪڻ واري ناڪامي کي روڪڻ ۽ قابل اعتماد مائڪرو سروس آرڪيٽيڪچر ٺاهڻ لاءِ. اسپرنگ ڊولپرز استعمال ڪري رهيا آهن سرڪٽ برڪرز کي غلطي رواداري لاءِ ڪيترن سالن کان. هسٽريڪس. جڏهن ته، هسٽريڪس گهڻو وقت تائين اپڊيٽ نه ڪيو ويو آهي، پر مائڪرو پروفائيل جي غلطي رواداري هاڻي فعال طور تي ترقي ڪري رهي آهي ۽ ان جي پويان ڪيترن ئي سالن جي پيداوار جو استعمال آهي. تنهن ڪري، Quarkus ۾ خدمتن جي اعتبار کي بهتر بڻائڻ لاءِ، MicroProfile Fault Tolerance APIs استعمال ڪرڻ جي سفارش ڪئي وئي آهي، جن جا مثال ٽيبل 5 ۾ استعمال ڪيا ويا آهن. ان بابت وڌيڪ معلومات لاءِ، ڏسو Quarkus Manual غلطي رواداري ھدايت.

ٽيبل 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 ۾ ڏنل آھن.

В اسان جي مثال مان پروجيڪٽ مائڪرو پروفائيل ميٽرڪس استعمال ڪيا ويندا آهن ايپليڪيشن ميٽرڪ مهيا ڪرڻ لاءِ. وڌيڪ معلومات لاءِ ڏسو Quarkus Manual ميٽرڪ گائيڊ.

ٽيبل 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

ايپليڪيشن جي ماپ مقامي هلو:8080/ميٽرڪس/ايپليڪيشن
بنيادي ماپون مقامي هلو:8080/ميٽرڪس/بيس
وينڊرز جي ماپ مقامي هلو:8080/ميٽرڪس/وينر
سڀ ماپ مقامي هلو:8080/ميٽرڪ

مائڪرو پروفائل باقي ڪلائنٽ

Microservices اڪثر مهيا ڪن ٿيون RESTful endpoints جن کي ڪم ڪرڻ لاءِ لاڳاپيل ڪلائنٽ APIs جي ضرورت هوندي آهي. RESTful endpoints استعمال ڪرڻ لاءِ، Spring ڊولپر عام طور تي RestTemplate استعمال ڪندا آهن. Quarkus هن مسئلي کي حل ڪرڻ لاءِ MicroProfile Rest Client APIs پيش ڪري ٿو، جن جا مثال ٽيبل 8 ۾ ڏنل آهن.

В اسان جي مثال مان پروجيڪٽ RESTful endpoints جو استعمال مائڪرو پروفائيل ريسٽ ڪلائنٽ استعمال ڪندي ڪيو ويندو آهي. ھن موضوع تي وڌيڪ معلومات ۽ مثال ملي سگھن ٿا Quarkus Manual ۾ باقي ڪلائنٽ گائيڊ.

ٽيبل 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

تبصرو شامل ڪريو