Quarkus est un Java subatomique supersonique. Bref aperçu du cadre

Quarkus est un Java subatomique supersonique. Bref aperçu du cadre

introduction

Le XNUMX mars, RedHat (bientÎt IBM) présenté nouveau cadre - quarkus. 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 cette 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
hello

La 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 Injecter. 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 enregistrer un profil pour l'assemblage et spĂ©cifiez-le lors de la construction de l'application :

mvn package -Pnative

Fait 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 instructions.

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 40 rallonges, qui ajoutent diverses fonctionnalités - du support Conteneur Spring DI О Chameau Apache 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 - quarkus.io. Des exemples de projets pour un démarrage rapide sont déjà disponibles sur GitHub.

Source: habr.com

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