
introduction
Le XNUMX mars, RedHat (bientÎt IBM) nouveau cadre - . Selon les développeurs, ce framework est basé sur GraalVM et OpenJDK HotSpot et est conçu pour Kubernetes. La pile Quarkus comprend : JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus et autres.
L'objectif est de faire de Java la plate-forme leader pour le déploiement de Kubernetes et le développement d'applications sans serveur, offrant aux développeurs une approche unifiée du développement dans des styles à la fois réactifs et impératifs.
Si vous regardez classification des frameworks, alors Quarkus se situe quelque part entre les « AgrĂ©gateurs/GĂ©nĂ©rateurs de Code » et les « Frameworks fullstack de haut niveau ». C'est dĂ©jĂ plus qu'un agrĂ©gateur, mais il n'atteint mĂȘme pas le full-stack, car... adaptĂ© au dĂ©veloppement backend.
Une trÚs grande vitesse de lancement des applications et une faible consommation de mémoire sont promises. Voici les données du site Web du développeur :
Délai entre le début et la premiÚre réponse :
Configuration
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Pile native cloud traditionnelle*
4.3
9.5
Consommation mémoire (Mo) :
Configuration
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Pile native cloud traditionnelle*
140
218
Impressionnant, n'est-ce pas ?
*Je n'ai trouvé aucune information sur cette pile technologique, on peut supposer qu'il s'agit d'une sorte de Spring Boot avec un kit carrosserie supplémentaire.
Bonjour le monde!
L'application la plus simple écrite en Quarkus ressemblerait à ceci :
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}C'est littéralement un cours et ça suffit ! Vous pouvez exécuter l'application à l'aide de Maven en mode développement :
mvn compile quarkus:dev
âŠ
$ curl http://localhost:8080/hello
helloLa diffĂ©rence avec une application classique est quâil nây a pas de classe Application ! Quarkus prend en charge le rechargement Ă chaud, vous pouvez donc modifier votre application sans la redĂ©marrer, ce qui rend le dĂ©veloppement encore plus rapide.
Et aprĂšs? Vous pouvez ajouter un service Ă un contrĂŽleur Ă l'aide d'une annotation . Code de service :
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}Manette:
@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!Notez que Quarkus utilise des annotations standard provenant de frameworks familiers - CDI et JAX-RS. Il n'est bien sûr pas nécessaire d'apprendre quoi que ce soit de nouveau si vous avez déjà travaillé avec CDI et JAX-RS.
Travailler avec la base de données
Les annotations Hibernate et JPA standard pour les entités sont utilisées. Comme pour les contrÎleurs REST, vous devez écrire un minimum de code. Il suffit d'indiquer les dépendances dans le fichier assembleur, d'ajouter des annotations @Entity et configurez la source de données dans application.properties.
Tous. Pas de sessionFactory, persistence.xml ou autres fichiers de service. Nous écrivons uniquement le code nécessaire. Toutefois, si nécessaire, vous pouvez créer un fichier persistence.xml et configurer plus finement la couche ORM.
Quarkus prend en charge la mise en cache des entitĂ©s, les collections pour les relations un-Ă -plusieurs et les requĂȘtes. Ă premiĂšre vue, ça a l'air gĂ©nial, mais c'est locale mise en cache, pour un nĆud Kubernetes. Ceux. Les caches des diffĂ©rents nĆuds ne sont pas synchronisĂ©s entre eux. J'espĂšre que c'est temporaire.
Exécution de code asynchrone
Comme mentionnĂ© ci-dessus, Quarkus prend Ă©galement en charge le style de programmation rĂ©actif. Le code de l'application prĂ©cĂ©dente peut ĂȘtre Ă©crit sous une forme diffĂ©rente.
@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 + "!";
});
}
}Le code asynchrone peut Ă©galement ĂȘtre transfĂ©rĂ© au service, le rĂ©sultat sera le mĂȘme.
Test
Les tests pour les applications Quarkus peuvent ĂȘtre Ă©crits en JUnit4 ou JUnit5. Vous trouverez ci-dessous un exemple de test pour un point de terminaison, il est Ă©crit en utilisant RestAssured, mais un autre framework peut ĂȘtre utilisĂ© :
@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 + "!"));
}
}L'annotation @QuarkusTest vous demande d'exécuter l'application avant d'exécuter les tests. Le reste est du code familier à tous les développeurs.
Application spécifique à la plateforme
Puisque Quarkus est étroitement intégré à GraalVM, il est bien sûr possible de générer du code spécifique à la plateforme. Pour ce faire, vous devez installer GraalVM et spécifier la variable d'environnement GRAALVM_HOME. Plus loin et spécifiez-le lors de la construction de l'application :
mvn package -PnativeFait intĂ©ressant, l'application gĂ©nĂ©rĂ©e peut ĂȘtre testĂ©e. Et ceci est important car lâexĂ©cution du code natif peut diffĂ©rer de lâexĂ©cution sur la JVM. L'annotation @SubstrateTest exĂ©cute le code d'application spĂ©cifique Ă la plateforme. La rĂ©utilisation du code de test existant peut ĂȘtre effectuĂ©e en utilisant l'hĂ©ritage ; par consĂ©quent, le code pour tester une application dĂ©pendante de la plate-forme ressemblera Ă ceci :
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}L'image gĂ©nĂ©rĂ©e peut ĂȘtre empaquetĂ©e dans Docker et exĂ©cutĂ©e dans Kubernetes ou OpenShift, dĂ©crite en dĂ©tail dans .
Outillage
Le framework Quarkus peut ĂȘtre utilisĂ© avec Maven et Gradle. Maven est entiĂšrement pris en charge, contrairement Ă Gradle. Malheureusement, pour le moment, Gradle ne prend pas en charge la gĂ©nĂ©ration d'un projet vide ; des informations dĂ©taillĂ©es sont disponibles sur le site Web. .
expansion
Quarkus est un framework extensible. Il y a actuellement une commande , qui ajoutent diverses fonctionnalités - du support О avant de journaliser et de publier les métriques des services en cours d'exécution. Et il existe déjà une extension pour prendre en charge l'écriture d'applications en Kotlin, en plus de Java.
Conclusion
Quarkus sâinscrit selon moi tout Ă fait dans la tendance de lâĂ©poque. Le dĂ©veloppement de code backend devient de plus en plus facile, et ce framework simplifie et accĂ©lĂšre encore le dĂ©veloppement de services en ajoutant la prise en charge native de Docker et Kubernetes. Un Ă©norme avantage est la prise en charge intĂ©grĂ©e de GraalVM et la gĂ©nĂ©ration d'images dĂ©pendantes de la plate-forme, qui permettent aux services de dĂ©marrer trĂšs rapidement et d'occuper peu d'espace mĂ©moire. Et cela est trĂšs important Ă notre Ă©poque de passion massive pour les microservices et lâarchitecture sans serveur.
Site officiel - . Des exemples de projets pour un démarrage rapide sont déjà disponibles sur .
Source: habr.com
