ڪوارڪس هڪ سپرسونڪ ذيلي ائٽمي جاوا آهي. فريم ورڪ جو مختصر جائزو

ڪوارڪس هڪ سپرسونڪ ذيلي ائٽمي جاوا آهي. فريم ورڪ جو مختصر جائزو

تعارف

XNUMX مارچ تي، RedHat (جلد ئي IBM) پيش ڪيو نئون فريم ورڪ - ڪرڪشس. ڊولپرز جي مطابق، هي فريم ورڪ GraalVM ۽ OpenJDK HotSpot تي ٻڌل آهي ۽ Kubernetes لاءِ ٺهيل آهي. Quarkus اسٽيڪ ۾ شامل آهن: JPA/Hibernate، JAX-RS/RESTEasy، Eclipse Vert.x، Netty، Apache Camel، Kafka، Prometheus ۽ ٻيا.

مقصد اهو آهي ته جاوا کي ڪبرنيٽس جي جوڙجڪ ۽ سرور کان سواءِ ايپليڪيشن ڊولپمينٽ لاءِ هڪ اهم پليٽ فارم ٺاهيو، ڊولپرز کي ٻنهي رد عمل ۽ لازمي اندازن ۾ ترقي لاءِ متحد طريقي سان مهيا ڪرڻ.

جيڪڏهن توهان ڏسندا هي فريم ورڪ جي درجه بندي، پوءِ ڪوارڪس ڪٿي آهي “Aggregators/code Generators” ۽ “High-level full stack frameworks” جي وچ ۾. اهو اڳ ۾ ئي هڪ مجموعي کان وڌيڪ آهي، پر اهو به مڪمل اسٽيڪ تائين نه پهچي، ڇاڪاڻ ته ... پس منظر جي ترقي لاء ٺهيل.

ايپليڪيشن لانچ جي تمام تيز رفتار ۽ گھٽ ميموري واپرائڻ جو واعدو ڪيو ويو آهي. هتي ڊولپر جي ويب سائيٽ مان ڊيٽا آهي:

وقت جي شروعات کان پهرين جواب (s):

ڪنفگريشن
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus + OpenJDK
0.75
2.5

روايتي Cloud اصلي اسٽيڪ*
4.3
9.5

ياداشت جو استعمال (Mb):

ڪنفگريشن
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus + OpenJDK
74
130

روايتي Cloud اصلي اسٽيڪ*
140
218

متاثر ڪندڙ، اهو ناهي؟

*مون کي هن ٽيڪنالاجي اسٽيڪ بابت ڪا به معلومات نه ملي آهي، اسان اهو فرض ڪري سگهون ٿا ته هي ڪنهن قسم جو اسپرنگ بوٽ آهي جنهن سان هڪ اضافي جسماني کٽ آهي.

سلام ورلڊ!

Quarkus ۾ لکيل آسان ترين ايپليڪيشن هن طرح نظر ايندي:

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String hello() {
       return "hello";
   }
}

اهو لفظي هڪ طبقو آهي ۽ اهو ڪافي آهي! توھان ڊولپمينٽ موڊ ۾ Maven استعمال ڪندي ايپليڪيشن کي هلائي سگھو ٿا:

mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello

باقاعده ايپليڪيشن کان فرق اهو آهي ته ڪو به ايپليڪيشن ڪلاس ناهي! Quarkus گرم ري لوڊ کي سپورٽ ڪري ٿو، ان ڪري توھان پنھنجي ايپليڪيشن کي تبديل ڪري سگھو ٿا ان کي ريسٽارٽ ڪرڻ کان سواءِ، ڊولپمينٽ اڃا وڌيڪ تيز.

اڳتي ڇا آهي؟ توهان هڪ تشريح استعمال ڪندي هڪ ڪنٽرولر ۾ خدمت شامل ڪري سگهو ٿا انجيڪشن. سروس ڪوڊ:

@ApplicationScoped
public class GreetingService {

   public String greeting(String name) {
       return "Hello " + name + "!";
   }
}

ڪنٽرولر:

@Path("/hello")
public class GreetingResource {

   @Inject
   GreetingService service;

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public String greeting(@PathParam("name") String name) {
       return service.greeting(name);
   }
}

$ curl http://localhost:8080/hello/developer
Hello developer!

نوٽ ڪريو ته Quarkus معياري تشريحون استعمال ڪري ٿو واقف فريم ورڪ - CDI ۽ JAX-RS. جيڪڏهن توهان اڳ ۾ CDI ۽ JAX-RS سان ڪم ڪيو آهي ته ڪجهه به نئين سکڻ جي ضرورت ناهي، يقينا.

ڊيٽابيس سان ڪم ڪرڻ

ادارن لاءِ Hibernate ۽ معياري JPA تشريحون استعمال ڪيون وينديون آھن. جيئن REST ڪنٽرولرز سان، توهان کي لکڻ جي ضرورت آهي گهٽ ۾ گهٽ ڪوڊ. اهو ڪافي آهي ته اسيمبلي فائل ۾ انحصار کي ظاهر ڪرڻ لاء، تشريح شامل ڪريو @Entity ۽ application.properties ۾ ڊيٽا ماخذ کي ترتيب ڏيو.

سڀ. ڪابه sessionFactory، persistence.xml يا ٻيون سروس فائلون. اسان صرف اهو ڪوڊ لکندا آهيون جنهن جي ضرورت آهي. بهرحال، جيڪڏهن ضروري هجي ته، توهان هڪ persistence.xml فائل ٺاهي سگهو ٿا ۽ ORM پرت کي وڌيڪ چڱي طرح ترتيب ڏئي سگهو ٿا.

Quarkus ادارن جي ڪيشنگ، ھڪڙي کان گھڻن رشتن لاءِ گڏ ڪرڻ، ۽ سوالن جي مدد ڪري ٿو. پهرين نظر ۾ اهو تمام سٺو لڳندو آهي، پر اهو آهي مقامي ڪيشنگ، هڪ ڪبرنيٽس نوڊ لاءِ. اهي. مختلف نوڊس جا ڪيچ هڪ ٻئي سان هم وقت ساز نه هوندا آهن. مون کي اميد آهي ته هي عارضي آهي.

هم وقت سازي ڪوڊ لڳائڻ

جيئن مٿي ذڪر ڪيو ويو آهي، Quarkus پڻ رد عمل واري پروگرامنگ انداز کي سپورٽ ڪري ٿو. پوئين ايپليڪيشن جو ڪوڊ مختلف شڪل ۾ لکي سگھجي ٿو.

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public CompletionStage<String> greeting(@PathParam("name") String name) {
       return CompletableFuture.supplyAsync(() -> {
           return "Hello " + name + "!";
       });
   }
}

Asynchronous ڪوڊ پڻ سروس ڏانهن منتقل ڪري سگھجي ٿو، نتيجو ساڳيو ٿيندو.

جاچ

Quarkus ايپليڪيشنن لاءِ ٽيسٽ JUnit4 يا JUnit5 ۾ لکي سگھجن ٿيون. ھيٺ ڏنل آھي ھڪڙو مثال امتحان لاءِ آخري پوائنٽ لاءِ، اھو لکيل آھي RestAssured استعمال ڪندي، پر ٻيو فريم ورڪ استعمال ڪري سگھجي ٿو:

@QuarkusTest
public class GreetingResourceTest {

   @Test
   public void testGreetingEndpoint() {
       String uuid = UUID.randomUUID().toString();
       given()
         .pathParam("name", uuid)
         .when().get("/hello/{name}")
         .then()
           .statusCode(200)
           .body(is("Hello " + uuid + "!"));
   }
}

@QuarkusTest تشريح توهان کي هدايت ڪري ٿي ته ٽيسٽ هلائڻ کان اڳ ايپليڪيشن کي هلائڻ لاءِ. باقي ڪوڊ سڀني ڊولپرز کان واقف آهي.

پليٽ فارم جي مخصوص ايپليڪيشن

جيئن ته Quarkus مضبوطي سان GraalVM سان ضم ٿيل آهي، اهو يقيناً ممڪن آهي ته پليٽ فارم جي مخصوص ڪوڊ ٺاهي. هن کي ڪرڻ لاء، توهان کي انسٽال ڪرڻ جي ضرورت آهي GraalVM ۽ وضاحت ڪريو GRAALVM_HOME ماحولياتي متغير. اڳتي اسيمبليءَ لاءِ پروفائل رجسٽر ڪريو ۽ ان کي بيان ڪريو جڏهن ايپليڪيشن ٺاهيندي:

mvn package -Pnative

دلچسپ ڳالهه اها آهي ته ٺاهيل ايپليڪيشن کي آزمائي سگهجي ٿو. ۽ اھو اھم آھي ڇو ته اصلي ڪوڊ جو عمل JVM تي عمل کان مختلف ٿي سگھي ٿو. @SubstrateTest تشريح پليٽ فارم جي مخصوص ايپليڪيشن ڪوڊ کي هلائي ٿو. موجوده ٽيسٽ ڪوڊ ٻيهر استعمال ڪري سگهجي ٿو وراثت استعمال ڪندي؛ نتيجي طور، پليٽ فارم تي منحصر ايپليڪيشن کي جانچڻ لاء ڪوڊ هن طرح نظر ايندو:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

ٺاهيل تصوير ڊاکر ۾ پيڪيج ڪري سگھجي ٿي ۽ ڪبرنيٽس يا اوپن شفٽ ۾ هلائي سگھجي ٿي، تفصيل سان بيان ڪيو ويو آھي هدايتون.

اوزار ٽڪيٽ

Quarkus فريم ورڪ Maven ۽ Gradle سان استعمال ڪري سگھجي ٿو. Maven مڪمل طور تي سپورٽ آهي، Gradle جي برعڪس. بدقسمتي سان، هن وقت Gradle هڪ خالي پروجيڪٽ ٺاهڻ جي حمايت نٿو ڪري؛ ويب سائيٽ تي تفصيلي ڄاڻ آهي درسي ڪتاب.

گنجائش

ڪوارڪس هڪ وسيع فريم ورڪ آهي. في الحال هڪ حڪم آهي 40 واڌارو، جيڪي مختلف ڪارڪردگي شامل ڪن ٿا - سپورٽ کان بهار DI ڪنٽينر и اپاچي اُٺ لاگ ان ٿيڻ کان اڳ ۽ هلندڙ خدمتن لاءِ ميٽرڪس شايع ڪرڻ. ۽ جاوا کان علاوه ڪوٽلن ۾ لکڻ جي ايپليڪيشنن کي سپورٽ ڪرڻ لاءِ اڳ ۾ ئي هڪ واڌ آهي.

ٿڪل

منهنجي خيال ۾، ڪوارڪس ان وقت جي رجحانن سان بلڪل مطابقت رکي ٿو. پس منظر ڪوڊ ڊولپمينٽ آسان ۽ آسان ٿي رهيو آهي، ۽ هي فريم ورڪ وڌيڪ آسان بڻائي ٿو ۽ خدمت جي ترقي کي تيز ڪري ٿو Docker ۽ Kubernetes لاءِ اصلي مدد شامل ڪندي. ھڪڙو وڏو پلس آھي GraalVM لاءِ بلٽ ان سپورٽ ۽ پليٽ فارم تي منحصر تصويرن جي نسل، جيڪا خدمتن کي واقعي جلدي شروع ڪرڻ جي اجازت ڏئي ٿي ۽ ٿوري ميموري اسپيس وٺي ٿي. ۽ اهو اسان جي وقت ۾ تمام ضروري آهي ماس جوش مائڪرو سروسز ۽ سرور بيس فن تعمير لاءِ.

سرڪاري سائيٽ - quarkus.io. تڪڙي شروعات لاءِ منصوبن جا مثال اڳ ۾ ئي موجود آهن GitHub.

جو ذريعو: www.habr.com

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