Ներածություն
Մարտի XNUMX-ին RedHat (շուտով IBM)
Նպատակն է Java-ն դարձնել առաջատար հարթակ Kubernetes-ի տեղակայման և առանց սերվերի հավելվածների մշակման համար՝ ծրագրավորողներին տրամադրելով զարգացման միասնական մոտեցում ինչպես ռեակտիվ, այնպես էլ հրամայական ոճերով:
Եթե նայեք
Խոստացվում է հավելվածի գործարկման շատ բարձր արագություն և հիշողության ցածր սպառում: Ահա մշակողի կայքի տվյալները.
Ժամանակը սկզբից մինչև առաջին պատասխանը (ներ).
Տեսիլ
ՀԱՆԳՍՏՅԱՆ
ՀԱՆԳՍՏԻ + JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Ավանդական Cloud Native Stack*
4.3
9.5
Հիշողության սպառում (Mb):
Տեսիլ
ՀԱՆԳՍՏՅԱՆ
ՀԱՆԳՍՏԻ + JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Ավանդական Cloud Native Stack*
140
218
Տպավորիչ է, այնպես չէ՞։
*Ես որևէ տեղեկություն չգտա այս տեխնոլոգիայի փաթեթի մասին, մենք կարող ենք ենթադրել, որ սա ինչ-որ Spring Boot-ն է՝ մարմնի լրացուցիչ հանդերձանքով:.
Բարեւ աշխարհ!
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-ն աջակցում է տաք վերաբեռնմանը, այնպես որ կարող եք փոխել ձեր հավելվածն առանց այն վերագործարկելու՝ զարգացումն ավելի արագ դարձնելով:
Ի՞նչ է հաջորդը: Դուք կարող եք ծառայություն ավելացնել կարգավորիչին՝ օգտագործելով ծանոթագրություն
@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-ի հետ։
Տվյալների բազայի հետ աշխատելը
Օգտագործվում են Ձմեռային ռեժիմ և ստանդարտ JPA ծանոթագրություններ սուբյեկտների համար: Ինչպես REST կարգավարների դեպքում, դուք պետք է գրեք նվազագույն կոդ: Բավական է անսամբլի ֆայլում նշել կախվածությունները, ավելացնել անոտացիաներ @Entity
և կարգավորել տվյալների աղբյուրը application.properties-ում:
Բոլորը. SesionFactory, persistence.xml կամ այլ սպասարկման ֆայլեր չկան: Մենք գրում ենք միայն այն կոդը, որն անհրաժեշտ է։ Այնուամենայնիվ, անհրաժեշտության դեպքում կարող եք ստեղծել persistence.xml ֆայլ և ավելի նուրբ կարգավորել ORM շերտը:
Quarkus-ն աջակցում է սուբյեկտների քեշավորմանը, մեկից շատ հարաբերությունների հավաքածուներ և հարցումներ: Առաջին հայացքից հիանալի է թվում, բայց այդպես է տեղական caching, մեկ Kubernetes հանգույցի համար: Նրանք. Տարբեր հանգույցների քեշերը միմյանց հետ համաժամանակացված չեն: Հուսով եմ, որ սա ժամանակավոր է:
Կոդի ասինխրոն կատարում
Ինչպես նշվեց վերևում, 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 + "!";
});
}
}
Ծառայությանը կարող է փոխանցվել նաև ասինխրոն կոդը, արդյունքը կլինի նույնը։
Փորձարկում
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 {
}
Ստեղծված պատկերը կարող է փաթեթավորվել Docker-ում և գործարկվել Kubernetes-ում կամ OpenShift-ում, մանրամասն նկարագրված
Инструментарий
Quarkus շրջանակը կարող է օգտագործվել Maven-ի և Gradle-ի հետ: Maven-ը լիովին աջակցվում է, ի տարբերություն Gradle-ի: Ցավոք, այս պահին Gradle-ը չի աջակցում դատարկ նախագծի ստեղծմանը, կայքում կա մանրամասն տեղեկատվություն
Ընդլայնումներ
Quarkus-ը ընդարձակվող շրջանակ է: Ներկայումս կա պատվեր
Ամփոփում
Իմ կարծիքով Quarkus-ը բավականին համահունչ է ժամանակի տենդենցներին։ Backend կոդի մշակումն ավելի ու ավելի հեշտ է դառնում, և այս շրջանակն էլ ավելի պարզեցնում և արագացնում է ծառայությունների զարգացումը` ավելացնելով Docker-ի և Kubernetes-ի համար տեղական աջակցություն: Հսկայական պլյուսը GraalVM-ի ներկառուցված աջակցությունն է և պլատֆորմից կախված պատկերների ստեղծումը, որը թույլ է տալիս ծառայություններին իսկապես արագ սկսել և քիչ տեղ գրավել հիշողության մեջ: Եվ սա շատ կարևոր է միկրոծառայությունների և առանց սերվերի ճարտարապետության հանդեպ զանգվածային կիրքի մեր ժամանակներում:
Պաշտոնական կայք -
Source: www.habr.com