Вовед
На XNUMX-ми март, RedHat (наскоро IBM)
Целта е Java да стане водечка платформа за распоредување на Kubernetes и развој на апликации без сервер, обезбедувајќи им на програмерите унифициран пристап кон развојот и во реактивен и во императивен стил.
Ако погледнете во
Се ветува многу голема брзина на стартување на апликацијата и мала потрошувачка на меморија. Еве ги податоците од веб-страницата на развивачот:
Време од почеток до првиот одговор (и):
Конфигурација
ОДМОР
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 не поддржува генерирање празен проект; има детални информации на веб-страницата
Екстензии
Кваркусот е растеглива рамка. Моментално има нарачка
Заклучок
Според мене, Quarkus е доста усогласен со трендовите на времето. Развојот на заднински код станува полесен и полесен, а оваа рамка дополнително го поедноставува и го забрзува развојот на услугите со додавање мајчин поддршка за Docker и Kubernetes. Огромен плус е вградената поддршка за GraalVM и генерирањето слики зависни од платформа, што им овозможува на услугите да стартуваат навистина брзо и да заземаат малку простор во меморијата. И ова е многу важно во нашето време на масовна страст за микроуслуги и архитектура без сервери.
Официјален сајт -
Извор: www.habr.com