Quarkus est un Java subsonique. Un aperçu rapide du framework

Quarkus est un Java subsonique. Un aperçu rapide du framework

Introduction

Le 7 mars, la sociĂ©tĂ© RedHat (bientĂŽt IBM) prĂ©sentĂ©e un nouveau framework — Quarkus. Selon les dĂ©veloppeurs, ce framework est basĂ© sur GraalVM et OpenJDK HotSpot et est conçu pour Kubernetes. La stack Quarkus comprend : JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus et d'autres.

L'objectif de sa création est de faire de Java la plateforme leader pour le déploiement sur Kubernetes et le développement d'applications sans serveur, en fournissant aux développeurs une approche unifiée pour le développement à la fois réactif et impératif.

Si l'on regarde la cet classification des frameworks, Quarkus se situe quelque part entre « Agrégateurs/Générateurs de code » et « Frameworks full-stack de haut niveau ». C'est déjà plus qu'un agrégateur, mais cela ne frÎle pas encore le full-stack, car il est taillé pour le développement backend.

Une trÚs haute vitesse de démarrage de l'application et une faible consommation de mémoire sont promises. Voici les données du site des développeurs :

Temps entre le démarrage et la premiÚre réponse (s) :

Configuration
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Stack Cloud Native Traditionnel*
4.3
9.5

Consommation mémoire (Mo) :

Configuration
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Stack Cloud Native Traditionnel*
140
218

Impressionnant, n'est-ce pas ?

*Je n'ai pas trouvé d'informations sur ce stack technologique, on peut supposer qu'il s'agit de Spring Boot avec un peu plus de compléments..

Hello World!

La plus simple des applications écrites en Quarkus ressemblera à cela :

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String hello() {
       return "hello";
   }
}

C'est littéralement une seule classe et c'est suffisant ! Vous pouvez lancer l'application avec Maven en mode développement :

mvn compile quarkus:dev


$ curl http://localhost:8080/hello
hello

La diffĂ©rence avec une application habituelle — il n'y a pas de classe Application ! Quarkus prend en charge le hot reload, ce qui permet de modifier l'application sans la redĂ©marrer, rendant ainsi le dĂ©veloppement encore plus rapide.

Et ensuite ? Vous pouvez ajouter un service au contrĂŽleur avec l'annotation Inject. Le code du service :

@ApplicationScoped
public class GreetingService {

   public String greeting(String name) {
       return "Hello " + name + "!";
   }
}

ContrĂŽleur :

@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 dans Quarkus, les annotations standards des frameworks familiers — CDI et JAX-RS — sont utilisĂ©es. Rien de nouveau Ă  apprendre si vous avez dĂ©jĂ  travaillĂ© avec CDI et JAX-RS, bien sĂ»r.

Travailler avec une base de données

Hibernate et les annotations JPA standard sont utilisés pour les entités. Comme pour les contrÎleurs REST, il est nécessaire d'écrire un minimum de code. Il suffit de spécifier les dépendances dans le fichier de build et de disposer les annotations. @Entity et de configurer le datasource dans application.properties.

C'est tout. Aucun sessionFactory, persistence.xml ou autre fichier de service. Nous écrivons uniquement le code nécessaire. Cependant, si nécessaire, il est possible de créer un fichier persistence.xml et de configurer plus finement la couche ORM.

Quarkus prend en charge la mise en cache des entitĂ©s, des collections pour les relations un-Ă -plusieurs, ainsi que des requĂȘtes. À premiĂšre vue, cela semble formidable, mais c'est le cache local, pour un seul nƓud Kubernetes. C'est-Ă -dire que les caches entre diffĂ©rents nƓuds ne sont pas synchronisĂ©s. J'espĂšre que c'est temporaire.

Exécution asynchrone du code

Comme mentionnĂ© prĂ©cĂ©demment, Quarkus prend Ă©galement en charge le style de programmation rĂ©actif. Le code de l'application prĂ©cĂ©dente peut ĂȘtre Ă©crit d'une autre maniĂšre.

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public CompletionStage greeting(@PathParam("name") String name) {
       return CompletableFuture.supplyAsync(() -> {
           return "Hello " + name + "!";
       });
   }
}

Le code asynchrone peut Ă©galement ĂȘtre transfĂ©rĂ© dans un service, le rĂ©sultat sera le mĂȘme.

Test

Les tests pour les applications Quarkus peuvent ĂȘtre Ă©crits avec JUnit4 ou JUnit5. Ci-dessous un exemple de test pour un endpoint, Ă©crit Ă  l'aide de RestAssured, mais il est Ă©galement possible d'utiliser un autre cadre :

@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 exige que l'application soit lancée avant d'exécuter les tests. Pour le reste, c'est du code familier à tous les développeurs.

Application dépendante de la plateforme

Comme Quarkus est étroitement intégré à GraalVM, il est bien sûr possible de générer du code dépendant de la plateforme. Pour cela, il faut installer GraalVM et indiquer la variable d'environnement GRAALVM_HOME. Ensuite, définir un profil pour la construction et le spécifier lors de la construction de l'application :

mvn package -Pnative

Ce qui est intĂ©ressant, c'est que l'application gĂ©nĂ©rĂ©e peut ĂȘtre testĂ©e. Et c'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 de l'application dĂ©pendant de la plateforme. La rĂ©utilisation du code de test existant peut se faire par hĂ©ritage, et le code pour tester une application dĂ©pendante de la plateforme 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, comme dĂ©crit en dĂ©tail dans des instructions.

Outils

Le framework Quarkus peut ĂȘtre utilisĂ© avec Maven et Gradle. Maven est entiĂšrement pris en charge, contrairement Ă  Gradle. Malheureusement, Ă  l'heure actuelle, Gradle ne prend pas en charge la gĂ©nĂ©ration de projet vide, des dĂ©tails sont disponibles sur le site. tutoriel.

Extensions

Quarkus est un framework extensible. Actuellement, il existe environ 40 extensions, qui ajoutent diverses fonctionnalitĂ©s — du support de Spring DI container et Apache Camel Ă  la journalisation et Ă  la publication de mĂ©triques pour les services en cours d'exĂ©cution. Une extension existe dĂ©jĂ  pour le support du dĂ©veloppement d'applications en Kotlin, en plus de Java.

Conclusion

À mon avis, Quarkus est tout Ă  fait dans l'air du temps. Le dĂ©veloppement du code backend devient de plus en plus simple, et ce framework facilite encore plus et accĂ©lĂšre le dĂ©veloppement des services, ajoutant un support « natif » pour Docker et Kubernetes. Un grand avantage — le support intĂ©grĂ© de GraalVM et la gĂ©nĂ©ration d'images dĂ©pendantes de la plateforme, ce qui permet de crĂ©er des services Ă  rĂ©ellement dĂ©marrage rapide et occupant peu d'espace en mĂ©moire. Cela est trĂšs important Ă  notre Ă©poque oĂč les microservices et l'architecture serverless sont en plein essor.

Site officiel — quarkus.io. Des exemples de projets pour un dĂ©marrage rapide sont dĂ©jĂ  disponibles sur GitHub.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster