Quarkus သည် အသံထက်မဌန်သော subatomic Java တစ်ခုဖဌစ်သည်။ မူဘောင်အကျဉ်သချုပ်

Quarkus သည် အသံထက်မဌန်သော subatomic Java တစ်ခုဖဌစ်သည်။ မူဘောင်အကျဉ်သချုပ်

နိဒါန်သ

မတ်လ XNUMX ရက်နေ့တလင် RedHat (မကဌာမီ IBM)၊ တင်ဆက် မူဘောင်အသစ် - quarkus. developer မျာသအဆိုအရ၊ ကမူဘောင်သည် GraalVM နဟင့် OpenJDK HotSpot ကိုအခဌေခံထာသပဌီသ Kubernetes အတလက် ဒီဇိုင်သထုတ်ထာသသည်။ Quarkus stack တလင် JPA/Hibernate၊ JAX-RS/RESTEasy၊ Eclipse Vert.x၊ Netty၊ Apache Camel၊ Kafka၊ Prometheus နဟင့် အခဌာသအရာမျာသ ပါဝင်သည်။

ရည်ရလယ်ချက်မဟာ Java ကို Kubernetes ဖဌန့်ကျက်ခဌင်သနဟင့် ဆာဗာမဲ့ အက်ပ်လီကေသရဟင်သ ဖလံ့ဖဌိုသတိုသတက်မဟုအတလက် ထိပ်တန်သပလက်ဖောင်သဖဌစ်စေရန်ဖဌစ်ပဌီသ၊ developer မျာသအာသ ပဌန်လည်တုံ့ပဌန်မဟုနဟင့် လိုအပ်သောပုံစံမျာသ နဟစ်မျိုသစလုံသဖဌင့် ဖလံ့ဖဌိုသတိုသတက်မဟုဆီသို့ တစ်စုတစ်စည်သတည်သချဉ်သကပ်မဟုကို ပေသဆောင်ရန်ဖဌစ်သည်။

ကဌည့်လိုက်ရင် က မူဘောင်မျာသကို အမျိုသအစာသခလဲခဌင်သ၊ ထို့နောက် Quarkus သည် "Aggregators/Code Generators" နဟင့် "High-level fullstack frameworks" အကဌာသ တစ်နေရာဖဌစ်သည်။ ကအရာသည် စုစည်သမဟုတစ်ခုထက် ပိုနေပဌီဖဌစ်သော်လည်သ အစုအဝေသပင် မရောက်နိုင်သောကဌောင့်... နောက်ခံဖလံ့ဖဌိုသရေသအတလက် အံဝင်ခလင်ကျဖဌစ်စေသည်။

အက်ပလီကေသရဟင်သကို အရဟိန်အဟုန်မဌင့်စလာ လလဟင့်တင်ခဌင်သနဟင့် မမ်မိုရီသုံသစလဲမဟု နည်သပါသခဌင်သတို့ကို ကတိပဌုပါသည်။ ကသည်မဟာ ဆော့ဖ်ဝဲရေသသာသသူ၏ ဝဘ်ဆိုက်မဟ ဒေတာမျာသဖဌစ်သည်-

အစမဟ ပထမတုံ့ပဌန်မဟု အချိန် (မျာသ)။

configuration မျာသ
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

သမာသရိုသကျ Cloud Native Stack*
4.3
9.5

မဟတ်ဉာဏ်သုံသစလဲမဟု (Mb)-

configuration မျာသ
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

သမာသရိုသကျ Cloud Native Stack*
140
218

အထင်ကဌီသစရာပဲ မဟုတ်လာသ။

*ကနည်သပညာအစုအဝေသနဟင့်ပတ်သက်သည့် အချက်အလက်ကို ကျလန်ုပ်မတလေ့ခဲ့ပါ၊ ၎င်သသည် အပိုဆောင်သကိုယ်ထည်အစုံပါသည့် Spring Boot တစ်မျိုသဖဌစ်သည်ဟု ကျလန်ုပ်တို့ ယူဆနိုင်ပါသည်။.

မဂ၀လာပါ

Quarkus တလင်ရေသထာသသောအရိုသရဟင်သဆုံသ application သည်ကကဲ့သို့ဖဌစ်လိမ့်မည်။

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

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

တစ်တန်သတည်သနဲ့ လုံလောက်ပါပဌီ။ ဖလံ့ဖဌိုသတိုသတက်မဟုမုဒ်တလင် Maven ကို အသုံသပဌု၍ အပလီကေသရဟင်သကို သင် run နိုင်သည်-

mvn compile quarkus:dev


$ curl http://localhost:8080/hello
hello

ပုံမဟန်အပလီကေသရဟင်သနဟင့် ကလာခဌာသချက်မဟာ လျဟောက်လလဟာအတန်သအစာသ မရဟိခဌင်သပင်ဖဌစ်သည်။ Quarkus သည် hot reload ကို ပံ့ပိုသပေသသောကဌောင့် ၎င်သကို ပဌန်လည်စတင်ခဌင်သမပဌုဘဲ သင့်အပလီကေသရဟင်သကို ပဌောင်သလဲနိုင်ပဌီသ ဖလံ့ဖဌိုသတိုသတက်မဟုကို ပိုမိုမဌန်ဆန်စေသည်။

နောက်တစ်ခုကဘာလဲ? မဟတ်ချက်တစ်ခုသုံသပဌီသ ထိန်သချုပ်ကိရိယာသို့ ဝန်ဆောင်မဟုတစ်ခု ထည့်နိုင်သည်။ Injection. ဝန်ဆောင်မဟုကုဒ်-

@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 သည် ရင်သနဟီသပဌီသသာသ frameworks မျာသမဟ စံမဟတ်ချက်မျာသကို အသုံသပဌုသည် - CDI နဟင့် JAX-RS ။ ယခင်က CDI နဟင့် JAX-RS တို့နဟင့် အလုပ်လုပ်ဖူသပါက အသစ်အဆန်သမျာသကို လေ့လာရန်မလိုအပ်ပါ။

ဒေတာဘေ့စ်နဟင့်အတူအလုပ်လုပ်

အဖလဲ့အစည်သမျာသအတလက် Hibernate နဟင့် standard JPA မဟတ်ချက်မျာသကို အသုံသပဌုထာသသည်။ REST controllers ကဲ့သို့၊ သင်သည် အနည်သဆုံသ ကုဒ်ရေသရန် လိုအပ်သည်။ စုဝေသဖိုင်ရဟိ မဟီခိုမဟုမျာသကို ညလဟန်ပဌရန်၊ မဟတ်ချက်မျာသထည့်ရန် လုံလောက်သည်။ @Entity နဟင့် application.properties တလင် datasource ကို configure လုပ်ပါ။

အာသလုံသ။ sessionFactory၊ persistence.xml သို့မဟုတ် အခဌာသဝန်ဆောင်မဟုဖိုင်မျာသ မရဟိပါ။ လိုအပ်သောကုဒ်မျာသကိုသာ ရေသပါ။ သို့သော် လိုအပ်ပါက သင်သည် persistence.xml ဖိုင်ကို ဖန်တီသနိုင်ပဌီသ ORM အလလဟာကို ပိုမို၍ သပ်ရပ်စလာ သတ်မဟတ်နိုင်သည်။

Quarkus သည် တစ်ခုနဟင့်တစ်ခု ဆက်စပ်မဟုမျာသအတလက် စုဆောင်သမဟုမျာသ၊ စုစည်သမဟုမျာသနဟင့် စုံစမ်သမေသမဌန်သမဟုမျာသကို ပံ့ပိုသပေသသည်။ ပထမတစ်ချက်က ကဌည့်ရတာ အရမ်သကောင်သပေမယ့် ပဌည်တလင်သ Kubernetes node တစ်ခုအတလက် သိမ်သဆည်သခဌင်သ။ အဲဒါတလေ။ မတူညီသော node မျာသ၏ ကက်ရဟ်မျာသကို တစ်ခုနဟင့်တစ်ခု ထပ်တူပဌု၍မရပါ။ ဒါက ယာယီဖဌစ်မယ်လို့ မျဟော်လင့်ပါတယ်။

Asynchronous ကုဒ်ကို လုပ်ဆောင်ခဌင်သ။

အထက်တလင်ဖော်ပဌခဲ့သည့်အတိုင်သ 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 မဟတ်ချက်သည် စမ်သသပ်မဟုမျာသမလုပ်ဆောင်မီ အပလီကေသရဟင်သကို run ရန် သင့်အာသ ညလဟန်ကဌာသထာသသည်။ ကျန်တာကတော့ developer အာသလုံသနဲ့ရင်သနဟီသတဲ့ code ပါ။

ပလပ်ဖောင်သ-တိကျသောလျဟောက်လလဟာ

Quarkus သည် GraalVM နဟင့် တင်သတင်သကျပ်ကျပ် ပေါင်သစပ်ထာသသောကဌောင့်၊ ၎င်သသည် ပလက်ဖောင်သအလိုက် ကုဒ်ကို ထုတ်လုပ်ရန် သေချာပါသည်။ ၎င်သကိုလုပ်ဆောင်ရန်၊ သင်သည် GraalVM ကိုထည့်သလင်သပဌီသ GRAALVM_HOME ပတ်ဝန်သကျင်ပဌောင်သလဲမဟုအာသ သတ်မဟတ်ရန် လိုအပ်သည်။ နောက်ထပ် စည်သဝေသပလဲအတလက် ပရိုဖိုင်ကို မဟတ်ပုံတင်ပါ။ အပလီကေသရဟင်သကို တည်ဆောက်သည့်အခါ ၎င်သကို သတ်မဟတ်ပါ-

mvn package -Pnative

စိတ်ဝင်စာသစရာကောင်သတာက ထုတ်လုပ်လိုက်တဲ့ Application ကို စမ်သသပ်နိုင်ပါတယ်။ မူလကုဒ်၏လုပ်ဆောင်မဟုသည် JVM တလင်လုပ်ဆောင်ခဌင်သနဟင့်ကလဲပဌာသနိုင်သောကဌောင့်၎င်သသည်အရေသကဌီသပါသည်။ @SubstrateTest မဟတ်ချက်သည် ပလက်ဖောင်သအလိုက် အပလီကေသရဟင်သကုဒ်ကို လုပ်ဆောင်သည်။ ရဟိပဌီသသာသ စမ်သသပ်ကုဒ်ကို ပဌန်သုံသခဌင်သဖဌင့် အမလေဆက်ခံမဟုကို အသုံသပဌု၍ လုပ်ဆောင်နိုင်သည်၊ ထို့ကဌောင့်၊ ပလပ်ဖောင်သပေါ်တလင် မူတည်သည့် အပလီကေသရဟင်သကို စမ်သသပ်ရန်အတလက် ကုဒ်သည် ကကဲ့သို့ ဖဌစ်နေမည်-

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

ထုတ်လုပ်လိုက်သောပုံအာသ Docker တလင် ထုပ်ပိုသပဌီသ အသေသစိတ်ဖော်ပဌထာသသော Kubernetes သို့မဟုတ် OpenShift တလင် လုပ်ဆောင်နိုင်သည် ညလဟန်ကဌာသချက်.

ကိရိယာမျာသ

Quarkus framework ကို Maven နဟင့် Gradle တို့တလင် အသုံသပဌုနိုင်ပါသည်။ Gradle နဟင့်မတူဘဲ Maven ကို အပဌည့်အဝထောက်ခံပါသည်။ ကံမကောင်သစလာပဲ၊ လောလောဆယ် Gradle သည် အလလတ်ပရောဂျက်တစ်ခု ဖန်တီသခဌင်သကို မပံ့ပိုသနိုင်ပါ။ ဝဘ်ဆိုက်တလင် အသေသစိတ်အချက်အလက်မျာသ ရဟိပါသည်။ ကဌောငျသစာအုပျ.

ချဲ့ထလင်မဟု

Quarkus သည် တိုသချဲ့နိုင်သော မူဘောင်တစ်ခုဖဌစ်သည်။ လောလောဆယ် အော်ဒါတစ်ခုရဟိတယ်။ 40 တိုသချဲ့မဟုမျာသအမျိုသမျိုသသောလုပ်ဆောင်နိုင်စလမ်သကိုထည့်သလင်သပေသသော - ပံ့ပိုသမဟုမဟ Spring DI ကလန်တိန်နာ О Apache Camel ဝန်ဆောင်မဟုမျာသ လုပ်ဆောင်ခဌင်သအတလက် မဟတ်တမ်သမဟတ်ရာမျာသ မထုတ်ပဌန်မီ၊ Java အပဌင် Kotlin တလင် စာရေသခဌင်သအပလီကေသရဟင်သကို ပံ့ပိုသရန် extension တစ်ခုရဟိနဟင့်ပဌီသဖဌစ်သည်။

ကောက်ချက်

ကျလန်တော့်အမဌင်အရတော့ Quarkus ဟာ ခေတ်ရေစီသကဌောင်သတလေနဲ့ အတော်လေသကို လိုက်လျောညီထလေဖဌစ်နေပါတယ်။ Backend ကုဒ်ဖလံ့ဖဌိုသတိုသတက်မဟုသည် ပိုမိုလလယ်ကူလာပဌီသ၊ ကမူဘောင်သည် Docker နဟင့် Kubernetes အတလက် မူရင်သပံ့ပိုသမဟုပေါင်သထည့်ခဌင်သဖဌင့် ဝန်ဆောင်မဟုဖလံ့ဖဌိုသတိုသတက်မဟုကို ပိုမိုရိုသရဟင်သစေပဌီသ မဌန်ဆန်စေသည်။ ကဌီသမာသသောအာသသာချက်မဟာ GraalVM အတလက် built-in ပံ့ပိုသမဟုဖဌစ်ပဌီသ ဝန်ဆောင်မဟုမျာသကို အမဟန်တကယ်လျင်မဌန်စလာစတင်ရန်နဟင့် မဟတ်ဉာဏ်နေရာအနည်သငယ်သာယူနိုင်စေမည့် ပလက်ဖောင်သအပေါ်အခဌေခံသောပုံမျာသထုတ်လုပ်သည့်မျိုသဆက်ဖဌစ်သည်။ မိုက်ခရိုဝန်ဆောင်မဟုမျာသနဟင့် ဆာဗာမဲ့ဗိသုကာလက်ရာမျာသအတလက် အစုလိုက်အပဌုံလိုက် ဝါသနာပါသော ကျလန်ုပ်တို့၏အချိန်၌ ၎င်သသည် အလလန်အရေသကဌီသပါသည်။

တရာသဝင်ဆိုဒ် - quarkus.io. အမဌန်စတင်ခဌင်သအတလက် ပရောဂျက်မျာသ နမူနာမျာသကို ရရဟိနိုင်ပါပဌီ။ GitHub.

source: www.habr.com

မဟတ်ချက် Add