
Ներածություն
Մարտի յոթին RedHat ընկերությունը (ակնկալվում է՝ IBM) նոր շրջանակ՝ ։ Զարգացողների խոսքերով, այս շրջանակը հիմնված է GraalVM-ի և OpenJDK HotSpot-ի վրա և նախատեսված է Kubernetes-ի համար։ Quarkus-ի տեքստը ներառում է. JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus և ուրիշներ։
Ստեղծման նպատակն է դարձնել Java-ն प्रमुख հարթակ Kubernetes-ում տեղափոխման և serverless ծրագրերի մշակման համար, առաջարկելով մշակողներին միակողմանի մոտեցում նաև ռեակտիվ, ոչ թե հանրային ձևով զարգացնելու համար։
Եթե նայում եք շրջանակների դասակարգմանը, ապա Quarkus գտնվում է «Աggregators/Code Generators» և «High-level fullstack frameworks» միջև։ Դա արդեն ավելին է, քան агрегատ, բայց դեռ չի հասնում full-stack-ի, քանի որ կենտրոնացած է բախտանի մշակման վրա։
Ավելի բարձրացված հավելվածը և ցածր հիշողության սպառումը խոստացվում է։ Սա տվյալները նշանակում է մշակողի կայքից.
Սկիզբից մինչև առաջին պատասխան ժամանակ (վարկյաններ):
Կոնֆիգուրացիա
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Traditional Cloud Native Stack*
4.3
9.5
Հիշողության սպառում (Mb):
Կոնֆիգուրացիա
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Traditional Cloud Native Stack*
140
218
Հիանալի չէ, այդքան չէ?
*Այս տեխնոլոգիաների փաթեթի մասին տեղեկություններ չգտա, կարելի է ենթադրել, որ դա ինչ-որ Spring Boot է հավելյալ հանգույցով..
Hello World!
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Տարբերվումը ծանոթ հավելվածից այնն է, որ չկա Application դաս։ Quarkus աջակցում է տաք վերադարձին, որպեսզի կարողանաք փոփոխել հավելվածը առանց այն վերափոխելու, այդպիսով զարգացումը դառնում է ավելի արագ։
Ինչ է հաջորդը? Կարելի է ավելացնել ծառայություն վերահսկիչի միջոցով Annotացիայով ։ Ծառայության կոդը.
@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ում օգտագործվում են սովորական Annotացիաներ՝ հայտնի շրջանակներից — CDI և JAX-RS։ Ոչինչ նոր սովորել պետք չէ, եթե դուք աշխատել եք CDI և JAX-RS-ի հետ մինչև այս պահը, իհարկե։
Աշխատանք տվյալների բազայի հետ
Օգտագործվում է Hibernate և ստանդարտ JPA Annotացիաներ էությունը։ Ինչպես REST վերահսկիչների դեպքում, անհրաժեշտ է գրել նվազագույն կոդ։ բավական է նշել կախվածությունները կառուցման ֆայլում, տեղադրել Annotացիաներ @Entity և կարգավորել datasource-ը application.properties-ում.
Հիմնականում։ Ոչ մի sessionFactory, persistence.xml և այլ ծառայողական ֆայլեր։ Գրում ենք միայն այն կոդը, որն անհրաժեշտ է։ Բայց, եթե անհրաժեշտ լինի, կարող եք ստեղծել persistence.xml ֆայլ և ավելի նուրբ կարգավորել ORM շերտը։
Quarkus օժանդակում է էակների, մեկից բազմաթիվ հարաբերությունների հավաքածուների և հարցումների կշռման։ Առաջին հայացքից, դա թվացյալ լավ է, բայց սա տեղական կշռում, մեկ Kubernetes узла համար։ Այսինքն, տարբեր узлы-ների կշռումները միմյանց միջև չեն համակցվում։ Հուսով եմ, որ սա ժամանակավոր է։
Ասինքրոն կատարման կոդ
Ինչպես վերը նշվեց, Quarkus օժանդակություն է ցուցաբերում նաև ռեակտիվ ծրագրավորման ոճին։ Նախորդ ծրային կոդը կարելի է գրանցել այլ կերպ։
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/{name}")
public CompletionStage greeting(@PathParam("name") String name) {
return CompletableFuture.supplyAsync(() -> {
return "Hello " + name + "!";
});
}
}Ասինքրոն կոդը նույնպես կարելի է տեղափոխել ծառայություն, արդյունքը նույնը կլինի։
Թեստավորում
Quarkus ծրագրերի համար թեստերը կարելի է գրել JUnit4 կամ JUnit5 վրա։ Ներքևում ներկայացված է օրինակ թեստի համար endpoint, որը գրված է 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 անոտացումը համարում է ծրագիրը սկսել առաջ, քան թեստերը սկսել։ Կ demás անփոփոխ է բոլոր ծրագրավորողների համար։
Պլատֆորմի կախյալ ծրագիր
Քանի որ Quarkus խիստ ինտեգրված է GraalVM-ի հետ, կարող եք, իհարկե, ստեղծել պլատֆորմի կախյալ կոդ։ Bunun համար անհրաժեշտ է տեղադրել GraalVM և նշել GRAALVM_HOME միջավայրի փոփոխականը։ Ապա և նշեք այն, երբ կառուցում եք ծրագիրը։
mvn package -PnativeՇատ հետաքրքիր է, ստեղծված ծրագիրը կարելի է փորձարկել։ Սա կարևոր է, քանի որ "այրային" կոդի կատարումը կարող է տարբեր լինել JVM-ի հաշվարկով։ @SubstrateTest անոտացմամբ նախատեսվում է գործարկել պլատֆորմի կախյալ կոդը ծրագիր։ Հետադարձ կրկնությունների օգտագործումը հնարավոր է իրականացնել ժառանգման միջոցով, արդյունքում պլատֆորմի կախյալ ծրագիրը փորձարկելու կոդը կլինի այսպես։
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}Ստեղծված պատկերիչը կարելի է փաթեթավորել Docker-ում և սկսել Kubernetes կամ OpenShift-ում, մանրամասն նկարագրված է .
Նշանակագիր
Quarkus ֆրեյմուարկը կարելի է օգտագործել Maven և Gradle-ի հետ։ Maven-ը ամբողջովին աջակցվում է, իսկ Gradle-ը՝ ոչ։ Ցավոք, այս պահին Gradle-ը չի աջակցում դատարկ նախագիծ ստեղծելու, կայքում կա մանրամասն .
Լրացումներ
Quarkus-ը ընդլայնելի ֆրեյմուարկ է։ Այս պահին գոյություն ունի շուրջ , որոնք ավելացնում են տարբեր գործառույթներ՝ կպահանջի և մինչև սպասարկման և կատարողականների հրապարակում։ Եվ արդեն գոյություն ունի լրացում՝ Kotlin լեզվով ծրագրարմարանքի աջակցությամբ, Java-ի լրիվեցմանը։
Ավարտ
Ընդհանուր առմամբ, կարծում եմ, որ Quarkus-ի ժամանակակից միտումներն իրենց տեղում են։ Բեքենդ կոդի մշակումն ավելի ու ավելի հեշտ է դառնում, և այս ֆрейմվորը առավելապես հեշտացնում և արագացնում է ծառայությունների մշակումը՝ ավելացնելով "ծնողական" աջակցություն Docker և Kubernetes։ Մեծ առավելությունն է՝ ներմուծված GraalVM աջակցություն և պլատֆորմից կախված պատկերների ստեղծում, ինչը թույլ է տալիս իրականում արագ մեկնարկվող և կոմպակտ ծառայություններ ստեղծել։ Սա շատ կարևոր է մեր ժամանակներում, երբ զանգվածային հետաքրքրություն կա միկրոմասնակարգերի և serverless ճարտարապետության հանդեպ։
Մասնագիտական կայք — ։ Հարուստ մեկնարկային նախագծերի օրինակներ արդեն կան .
Ընտանիք: habr.com
