Introdución
O XNUMX de marzo, RedHat (en breve IBM)
O obxectivo é facer de Java a plataforma líder para a implantación de Kubernetes e o desenvolvemento de aplicacións sen servidor, proporcionando aos desenvolvedores un enfoque unificado para o desenvolvemento tanto en estilos reactivos como imperativos.
Se miras
Prométese unha velocidade moi alta de lanzamento da aplicación e un baixo consumo de memoria. Aquí tes os datos do sitio web do programador:
Tempo desde o inicio ata a primeira resposta(s):
Configuración
DESCANSO
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Pila nativa na nube tradicional*
4.3
9.5
Consumo de memoria (Mb):
Configuración
DESCANSO
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Pila nativa na nube tradicional*
140
218
Impresionante, non?
*Non atopei ningunha información sobre esta pila de tecnoloxía, podemos supoñer que se trata dunha especie de Spring Boot cun kit de carrocería adicional.
Ola mundo!
A aplicación máis sinxela escrita en Quarkus sería así:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
É literalmente unha clase e é suficiente! Podes executar a aplicación usando Maven no modo de desenvolvemento:
mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello
A diferenza dunha aplicación normal é que non hai unha clase de aplicación. Quarkus admite a recarga en quente, polo que pode cambiar a súa aplicación sen reiniciala, facendo que o desenvolvemento sexa aínda máis rápido.
Que segue? Podes engadir un servizo a un controlador mediante unha anotación
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Controlador:
@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!
Teña en conta que Quarkus usa anotacións estándar de marcos coñecidos: CDI e JAX-RS. Non hai que aprender nada novo se xa traballaches con CDI e JAX-RS antes, por suposto.
Traballando coa base de datos
Utilízanse anotacións de Hibernate e JPA estándar para as entidades. Do mesmo xeito que cos controladores REST, cómpre escribir un mínimo de código. Basta con indicar as dependencias no ficheiro de montaxe, engadir anotacións @Entity
e configurar a fonte de datos na aplicación.propiedades.
Todos. Non hai ficheiros sessionFactory, persistence.xml nin outros servizos. Escribimos só o código que sexa necesario. Non obstante, se é necesario, pode crear un ficheiro persistence.xml e configurar a capa ORM con máis precisión.
Quarkus admite o almacenamento en caché de entidades, coleccións para relacións de un a varios e consultas. A primeira vista parece xenial, pero é así local caché, para un nodo de Kubernetes. Eses. As cachés dos distintos nodos non están sincronizadas entre si. Espero que isto sexa temporal.
Execución de código asíncrono
Como se mencionou anteriormente, Quarkus tamén admite o estilo de programación reactiva. O código da solicitude anterior pódese escribir nunha forma diferente.
@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 + "!";
});
}
}
Tamén se pode transferir código asíncrono ao servizo, o resultado será o mesmo.
Probas
As probas para aplicacións Quarkus pódense escribir en JUnit4 ou JUnit5. A continuación móstrase un exemplo de proba para un punto final, está escrito usando RestAssured, pero pódese usar outro marco:
@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 + "!"));
}
}
A anotación @QuarkusTest indícase que execute a aplicación antes de realizar probas. O resto é código familiar para todos os desenvolvedores.
Aplicación específica da plataforma
Dado que Quarkus está estreitamente integrado con GraalVM, por suposto que é posible xerar código específico da plataforma. Para iso, cómpre instalar GraalVM e especificar a variable de ambiente GRAALVM_HOME. Ademais
mvn package -Pnative
Curiosamente, a aplicación xerada pódese probar. E isto é importante porque a execución do código nativo pode diferir da execución na JVM. A anotación @SubstrateTest executa código de aplicación específico da plataforma. A reutilización do código de proba existente pódese facer mediante a herdanza; como resultado, o código para probar unha aplicación dependente da plataforma terá o seguinte aspecto:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
A imaxe xerada pódese empaquetar en Docker e executarse en Kubernetes ou OpenShift, descrito en detalle en
Kit de ferramentas
O framework Quarkus pódese usar con Maven e Gradle. Maven é totalmente compatible, a diferenza de Gradle. Desafortunadamente, polo momento Gradle non admite a xeración dun proxecto baleiro; hai información detallada no sitio web
Extensións
Quarkus é un framework extensible. Actualmente hai unha orde
Conclusión
Na miña opinión, Quarkus está bastante en liña coas tendencias da época. O desenvolvemento de código de backend é cada vez máis sinxelo e este cadro simplifica e acelera aínda máis o desenvolvemento do servizo engadindo soporte nativo para Docker e Kubernetes. Unha gran vantaxe é o soporte integrado para GraalVM e a xeración de imaxes dependentes da plataforma, o que permite que os servizos se inicien moi rápido e ocupen pouco espazo de memoria. E isto é moi importante na nosa época de paixón masiva polos microservizos e a arquitectura sen servidor.
Sitio oficial -
Fonte: www.habr.com