Aller au contenu

À la découverte de Quarkus

Quarkus est un framework Java moderne et performant qui simplifie le développement d'applications cloud natives : découvrons-le au travers de la création d’une application exposant des micro-services REST.

Développeur s'extasiant devant le framework Quarkus (image générée par Microsoft Copilot)

Présentation

Quarkus est un framework Java conçu par Red Hat, dont la première release date de 2019.

Ce framework, contrairement à Spring boot, est conçu pour fonctionner dans des conteneurs et est nativement compatible avec Kubernetes.

  • Il est ainsi optimisé pour démarrer rapidement et être faible en utilisation de la mémoire (il ne garde que les classes utilisées au moment de l’exécution)
  • Il peut réagir rapidement à une mise à l’échelle instantanée et à une utilisation de la mémoire à haute densité dans Kubernetes
  • Il est pensé pour des applications compilées en mode natif grâce à GraalVM
  • Il offre un mode de développement en direct qui permet aux développeurs de voir les modifications de leur code en temps réel sans avoir à s’occuper de redémarrer l'application (Quarkus le fait tout seul à la manière d’un hot reload)
  • Il supporte des normes et des bibliothèques Java modernes et éprouvées : MicroProfile, Hibernate, RESTEasy, … .
  • Il peut combiner du code impératif et réactif

Différences avec Spring boot

  • Bien que Spring boot puisse être utilisé dans des environnements de conteneurs, il n'est pas spécifiquement optimisé pour cela
  • Ce n'est que récemment que Spring Boot a commencé à supporter la compilation en mode natif via GraalVM, et de manière moins optimisée que Quarkus
  • Malgré un mode de développement direct dans Spring boot, il est généralement nécessaire de redémarrer l’application pour voir les modifications
  • Spring boot dispose d’une plus grande communauté au vu de son ancienneté (2014) contrairement à Quarkus dont la communauté est en cours de croissance

Débuter avec Quarkus

Comme avec Spring boot, le site internet de Quarkus permet de définir les bibliothèques que l’on va associer à notre projet.

Dans Quarkus, les bibliothèques ou librairies sont appelées des extensions.

En se rendant à cette url https://code.quarkus.io/, à date on peut :

  • Renseigner notre groupe et id d’artefact de projet
  • Choisir l’utilitaire de build (Maven ou Gradle)
  • Notre numéro de version
  • Notre version de Java à utiliser (17 ou 21)
  • Et si l’on souhaite disposer de codes d’exemple : starter code
Écran de configuration d’une nouvelle application sous Quarkus (https://code.quarkus.io/)

À noter qu’il est aussi possible de créer un projet Quarkus par leur client en ligne de commande (CLI), plus d’informations ici.

Pour mon exemple, je vais vous présenter la création d’une application exposant des micro-services REST.

Comme vu dans la capture plus haut, j’ai donné un nom de groupe (sfeir.dev) et d’artifact (intro-quarkus) pour créer une nouvelle application gérée par Maven, utilisant Java 17 et comprenant les extensions :

  • Quarkus-rest (pour permettre l’exposition de micro-services REST)
  • Quarkus-rest-jackson (pour pouvoir utiliser du JSON en entrée et sortie de mes microservices REST via Jackson / NB: Quarkus propose aussi d’autres framework que Jackson)

Il faut ensuite cliquer sur le bouton « Generate your application » pour récupérer un zip de notre application générée, qui reste à importer dans notre IDE (ex : IntelliJ, Visual studio code, ...).

Une fois le projet importé dans votre IDE (ici IntelliJ), vous vous retrouvez avec l’arborescence suivante :

Arborescence visible sur le projet une fois le projet importé dans votre IDE
  • Les sources dans src/main :
    • Un dossier docker pour pouvoir créer facilement une image Docker de notre application de façon native (via GraalVM) ou classique (JVM)
    • Un dossier Java avec notre package “sfeir.dev” contenant nos classes Java
    • Un dossier resources avec le fichier application.properties qui permet de contenir le paramétrage spécifique de notre application
  • Tout ce qui concerne les tests dans src/test

Dans l’application générée par Quarkus, on voit qu’il a créé une classe Java intitulée GreetingResource et qui expose un micro-service GET sur le chemin “/hello” qui retourne le message : “Hello from Quarkus REST”.

Si l’on démarre l’application, on peut voir que celle-ci est exposée sur le port par défaut : http://localhost:8080.

La page http://localhost:8080, renvoie vers une page permettant de vérifier que l’application tourne et renvoie vers des liens (documentation, dev UI).

Si l’on accède à l’url http://localhost:8080/hello, on voit bien que l’appel à notre micro-service “hello” est effectué et que le message “Hello from Quarkus REST” est retournée :

Pour pousser un peu plus l’exemple, je vais exposer tous mes micro-services via le chemin “/api”, et je vais créer un nouveau micro-service qui retournera un JSON avec un message prenant en entrée un nom fourni (name).

Ainsi, le code de la classe GreetingResource devient :

Et une classe Hello a été créé afin de contenir le message :

Si on se rend sur les urls :

On peut voir que Quarkus a pris en temps réel nos modifications et qu’il n’y a pas eu besoin de redémarrer l’application.

Retour de l’appel au ms GET “helloWithJson” avec comme paramètre le nom “Florian”

Conclusion

Quarkus est un framework Java moderne et performant qui simplifie le développement d'applications cloud natives.

Il offre une approche déclarative, des temps de démarrage rapides (0,042 secondes pour du REST + CRUD contre 4,3 secondes pour une stack classique comme Spring boot) et une empreinte mémoire réduite (7 fois moins).

Quarkus prend en charge une large gamme d'extensions, ce qui permet aux développeurs de personnaliser leurs applications en fonction de leurs besoins spécifiques.

Dans cet article, nous avons exploré les fonctionnalités de Quarkus et avons fourni un exemple de création d'une application REST simple.

Nous avons vu comment Quarkus permet de développer et de déployer rapidement des applications cloud natives, tout en bénéficiant d'une faible surcharge et d'une grande évolutivité.

À mesure que l'engouement pour les applications cloud natives croît, le rôle de Quarkus dans leur développement devient de plus en plus prépondérant. Sa simplicité, ses performances et sa flexibilité en font un choix idéal pour les développeurs qui cherchent à créer des applications cloud natives modernes et efficaces.


Sources :

Dernier