Кваркус е суперсонична субатомска Јава. Краток преглед на рамката

Кваркус е суперсонична субатомска Јава. Краток преглед на рамката

Вовед

На XNUMX-ми март, RedHat (наскоро IBM) презентирани нова рамка - Кваркус. Според програмерите, оваа рамка е базирана на GraalVM и OpenJDK HotSpot и е дизајнирана за Kubernetes. Стакот Quarkus вклучува: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus и други.

Целта е Java да стане водечка платформа за распоредување на Kubernetes и развој на апликации без сервер, обезбедувајќи им на програмерите унифициран пристап кон развојот и во реактивен и во императивен стил.

Ако погледнете во ова класификација на рамки, тогаш Quarkus е некаде помеѓу „Aggregators/Code Generators“ и „High-level fullstack frames“. Ова е веќе повеќе од агрегатор, но не го ни достигнува целосниот пакет, бидејќи ... прилагодени за развој на задниот дел.

Се ветува многу голема брзина на стартување на апликацијата и мала потрошувачка на меморија. Еве ги податоците од веб-страницата на развивачот:

Време од почеток до првиот одговор (и):

Конфигурација
ОДМОР
REST+JPA

Кваркус+ГраалВМ
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Традиционален Cloud Native Stack*
4.3
9.5

Потрошувачка на меморија (Mb):

Конфигурација
ОДМОР
REST+JPA

Кваркус+ГраалВМ
13
35

Quarkus+OpenJDK
74
130

Традиционален Cloud Native Stack*
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 и конфигурирајте го изворот на податоци во апликацијата.својства.

Сите. Нема sessionFactory, persistence.xml или други услужни датотеки. Ние го пишуваме само кодот што е потребен. Меѓутоа, доколку е потребно, можете да креирате датотека persistence.xml и пофино да го конфигурирате слојот ORM.

Quarkus поддржува кеширање на ентитети, колекции за врски еден-на-многу и прашања. На прв поглед изгледа одлично, но тоа е локален кеширање, за еден 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, детално опишани во инструкции.

Toolkit

Рамката Quarkus може да се користи со Maven и Gradle. Мејвен е целосно поддржан, за разлика од Градл. За жал, во моментов Gradle не поддржува генерирање празен проект; има детални информации на веб-страницата тетратка.

Екстензии

Кваркусот е растеглива рамка. Моментално има нарачка 40 екстензии, кои додаваат различни функционалности - од поддршка Пролет DI контејнер и Апачи камила пред да се евидентираат и објавуваат метрика за водење услуги. И веќе има проширување за поддршка за пишување апликации во Котлин, покрај Java.

Заклучок

Според мене, Quarkus е доста усогласен со трендовите на времето. Развојот на заднински код станува полесен и полесен, а оваа рамка дополнително го поедноставува и го забрзува развојот на услугите со додавање мајчин поддршка за Docker и Kubernetes. Огромен плус е вградената поддршка за GraalVM и генерирањето слики зависни од платформа, што им овозможува на услугите да стартуваат навистина брзо и да заземаат малку простор во меморијата. И ова е многу важно во нашето време на масовна страст за микроуслуги и архитектура без сервери.

Официјален сајт - кваркус.io. Веќе се достапни примери на проекти за брз почеток GitHub.

Извор: www.habr.com

Додадете коментар