VT2020-Micronaut-Fiche: Difference between revisions
Line 10: | Line 10: | ||
=Fonctionnement = |
=Fonctionnement = |
||
[[File:helloworld.png|300px|thumb|left|Micronaut logo]] |
|||
une fonctionnalités clé de Micronaut est la compilation [https://fr.wikipedia.org/wiki/Compilation_anticip%C3%A9e Ahead-Of-Time (AOT)]. En ajoutant le module java inject au compilateur, les annotations sont traitées au moment de la compilation. Le compilateur génère des classes basées sur les annotations avec les définitions des beans. Ensuite, Micronaut peut créer des beans et lire leurs métadonnées à partir des classes générées. Micronaut n'a pas besoin d'utiliser l'API de slow réflexion au moment de l'exécution. |
une fonctionnalités clé de Micronaut est la compilation [https://fr.wikipedia.org/wiki/Compilation_anticip%C3%A9e Ahead-Of-Time (AOT)]. En ajoutant le module java inject au compilateur, les annotations sont traitées au moment de la compilation. Le compilateur génère des classes basées sur les annotations avec les définitions des beans. Ensuite, Micronaut peut créer des beans et lire leurs métadonnées à partir des classes générées. Micronaut n'a pas besoin d'utiliser l'API de slow réflexion au moment de l'exécution. |
||
[[File:heloworldstartup.png|300px|thumb|right|Micronaut logo]] |
|||
Au démarrage de l'application, le contexte d'application avec tous les beans est créé (voir la figure pour plus de détails). Au cours de cette phase, toutes les méta-données des annotations sont évaluées et sont ensuite reliées entre elles. Après avoir créé le contexte de l'application, le serveur web Netty est lancé. |
Au démarrage de l'application, le contexte d'application avec tous les beans est créé (voir la figure pour plus de détails). Au cours de cette phase, toutes les méta-données des annotations sont évaluées et sont ensuite reliées entre elles. Après avoir créé le contexte de l'application, le serveur web Netty est lancé. |
||
Lorsqu'un client envoie une requête HTTP au point de terminaison |
Lorsqu'un client envoie une requête HTTP au point de terminaison . Cet appel est traité par le serveur Netty qui déclenche un gestionnaire dans le module netty-http-server. Ce gestionnaire utilise le bean Router pour déterminer le contrôleur correspondant qui, dans ce cas, est le bean . Il appelle la méthode correspondante et transmet le résultat au serveur Netty qui le renvoie sur le canal HTTP. |
||
Micronaut effectue l'injection de dépendance ci-dessus sans exiger de réflexion. La clé est un ensemble de transformations ''AST'' (pour Groovy) et de processeurs d'annotation (pour Java) qui génèrent des classes qui implémentent l'interface ''BeanDefinition''. |
Micronaut effectue l'injection de dépendance ci-dessus sans exiger de réflexion. La clé est un ensemble de transformations ''AST'' (pour Groovy) et de processeurs d'annotation (pour Java) qui génèrent des classes qui implémentent l'interface ''BeanDefinition''. |
Revision as of 06:10, 16 November 2020
Présentation
Micronaut est un framework full-stack Java moderne, basé sur la JVM, créé pour construire des applications de type microservices, Serverless modulaires, facilement testables avec un support pour Java, Kotlin et le langage Groovy adaptés au JDK et à GraalVM. Micronaut est développé par les créateurs du framework Grails et sponsorisé par Object Computing, Inc.
- La première version de Micronaut (1.0.0) est sortie en 2018
- Il est open source sous licence Apache 2.0
Fonctionnement
une fonctionnalités clé de Micronaut est la compilation Ahead-Of-Time (AOT). En ajoutant le module java inject au compilateur, les annotations sont traitées au moment de la compilation. Le compilateur génère des classes basées sur les annotations avec les définitions des beans. Ensuite, Micronaut peut créer des beans et lire leurs métadonnées à partir des classes générées. Micronaut n'a pas besoin d'utiliser l'API de slow réflexion au moment de l'exécution.
Au démarrage de l'application, le contexte d'application avec tous les beans est créé (voir la figure pour plus de détails). Au cours de cette phase, toutes les méta-données des annotations sont évaluées et sont ensuite reliées entre elles. Après avoir créé le contexte de l'application, le serveur web Netty est lancé.
Lorsqu'un client envoie une requête HTTP au point de terminaison . Cet appel est traité par le serveur Netty qui déclenche un gestionnaire dans le module netty-http-server. Ce gestionnaire utilise le bean Router pour déterminer le contrôleur correspondant qui, dans ce cas, est le bean . Il appelle la méthode correspondante et transmet le résultat au serveur Netty qui le renvoie sur le canal HTTP.
Micronaut effectue l'injection de dépendance ci-dessus sans exiger de réflexion. La clé est un ensemble de transformations AST (pour Groovy) et de processeurs d'annotation (pour Java) qui génèrent des classes qui implémentent l'interface BeanDefinition. La bibliothèque de bytecode d'ASM est utilisée pour générer les classes et comme Micronaut connaît à l'avance les points d'injection, il n'est pas nécessaire de scanner toutes les méthodes, champs, constructeurs, etc. à l'exécution comme le font d'autres framework tels que Spring qui repose exclusivement sur la réflexion et les proxys à l'exécution(runtime).
En outre, avec Micronaut, le temps de démarrage de votre application et la consommation de mémoire ne sont pas liés à la taille de votre base de code, comme c'est le cas pour un framework qui utilise la réflexion.
Fonctionnalités
Micronaut s'inspire des Framework Spring, Spring Boot et Grails. Micronaut vise à fournir tous les outils nécessaires pour construire des applications JVM, y compris :
- Injection de dépendance et inversion de contrôle(IoC): Micronaut utilise les données à la compilation (compile time) pour mettre en œuvre l'injection de dépendance qui utiliser la réflexion qu'en dernier recours.
- Aspect Oriented Programming(AOP): Micronaut fournit une implementation d'AOP qui n'utilise pas la réflexion pour définir les préoccupations transversales(cross cutting concerns) (logging, transactions, tracing etc.)
- Sensible Defaults and Auto-Configuration:exemple Fast Access Configuration Micronaut fournit des valeurs par défaut raisonnables qui configurent automatiquement votre boîte à outils d'accès aux données et vos API préférées pour faciliter l'écriture de vos propres intégrations.
- Micronaut propose un modèle asynchrone et non bloquant et le rend donc indiqué pour développer des applications réactives. Pour cela la couche réseau est basée sur le serveur Netty qui apporte la gestion de l’event loop .
- Configuration d'accès des données avec les bases mongoDB, Neo4j, Postgres, Cassandra, Redis…
Résilience et tolérance aux fautes
- Mécaniques intégrées de retry et circuit breaker : être capable de se remettre d'echec est critique pour les clients HTTP et c'est là que les Retry Advice intégrés à Micronaut interviennent.
Cloud
- Configuration distribuée(HashiCorp Consul, AWS Parameter Store etc)
- Service Discovery (Consul, Eureka, Kubernetes …)
- Load Balancing(Équilibrage des charges) côté client (Netflix Ribbon )
- Distributed Tracing : Le traçage distribué permet de déterminer où se produisent les défaillances et ce qui cause les mauvaises performances.
- Serverless functions : L'approche de Micronaut en termes de son temps de démarrage rapide et sa faible empreinte mémoire à la compilation en font un candidat idéal pour servir de framework au développement de fonctions. En fait, Micronaut offre un support dédié au développement et au déploiement de fonctions pour AWS Lambda et tout système FaaS qui prend en charge l'exécution de fonctions en tant que conteneurs (tels que OpenFaaS, Rift ou Fn)
Les projets Micronaut peuvent également être générés à l'aide d'un générateur en ligne https://micronaut.io/launch/
Cas d'utilisations
Avec Micronaut, on peut construire des applications de type microservices, Serverless, Message-driven avec Kafka/Rabbit ,applications de CLI, Android etc. Parmi ces applications on peut faire des applications axées sur les messages, des applications de ligne de commande, des serveurs HTTP et bien d'autres choses encore.
Avantages
Micronaut vise à éviter les inconvénients de Framework comme Spring, Spring Boot et Grails. Micronaut dispose d'une injection de dépendance et d' AOP lors de l'exécution qui n'utilise pas de reflexion ce qui rends plus facile le lancement d'applications de Micronaut sur GraalVM. Les avantages qu'on peut tirer sont :
- Temps de démarrage rapide
- Réduction de l'empreinte mémoire
- Utilisation minimale de la réflexion
- Utilisation minimale des proxys
- Pas de génération d'environnement d'exécution du bytecode
- Robuste, Scalable: Micronaut est doté d'un système robuste d'externalisation et d'adaptation de la configuration à l'environnement, inspiré d'approches similaires à celles de Grails et Spring Boot.
- Test unitaire facile
Inconvénients
- Certaines dépendances ne supportent pas (encore) GraalVM :
Le support GraalVM (comme GraalVM lui-même) est toujours en phase d'incubation. Le support des bibliothèques tierces est aléatoire et l'équipe Micronaut est toujours en train de régler tous les problèmes potentiels. Jusqu'à présent, le serveur HTTP, le client HTTP, le support de fonction et le module de découverte de service de Micronaut ont été vérifiés comme fonctionnant sur GraalVM 1.0 RC6 ou supérieur. Le support des autres modules est encore en cours d'évolution.
- Micronaut n'offre pas autant de fonctionnalités ou d'intégrations comme Spring Boot
- Par exemple, il n'existe actuellement aucune prise en charge des vues côté serveur ou des fonctionnalités typiques d'un framework MVC côté serveur traditionnel.
Installation
Avec SDKMAN
Cet outil facilite l'installation de Micronaut sur toute plate-forme basée sur Unix (Mac OSX, Linux, Cygwin, Solaris ou FreeBSD).
Ouvrez un nouveau terminal entrez :
$ curl -s https://get.sdkman.io | bash
Suivez les instructions à l'écran pour terminer l'installation.
Ouvrez un nouveau terminal ou tapez la commande :
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
Installez ensuite la dernière version stable de Micronaut:
$ sdk install micronaut
Une fois l'installation finie. Vous pouvez voir la version installé en tapant la commande:
$ mn --version
Utilisation :
Créer une application en utilisant l'interface de ligne de commande Micronaut.
mn create-app example.micronaut.complete
La commande précédente crée une application micronaut avec le paquet par défaut example.micronaut dans un dossier nommé complete.
Par défaut, create-app crée une application Java Micronaut qui utilise le système de compilation Gradle. Cependant, vous pouvez utiliser d'autres outils de compilation tels que Maven ou d'autres langages de programmation comme Groovy ou Kotlin.
Si vous utilisez Java ou Kotlin et IntelliJ IDEA, assurez-vous que vous avez activé le traitement des annotations.
Pour plus d'informations cliquer ici
Utiliser Micronaut avec JHipster
Installer MHipster
$ npm install -g generator-jhipster-micronaut
Creer a new folder for your application Lancer MHipster
$ mhipster
Si vous avez déjà installé JHipster, vous pouvez utiliser la commande suivante:
$ jhipster --blueprints micronaut
- Monolith projects
- Microservice projects
- JWT or OAuth 2.0 Authentication
- SQL Database Support
MySQL MariaDB PostgreSQL H2
- Ehcache
- Caffeine Cache
- Redis Cache
- Maven or Gradle Build System
- Angular or React Client
- Protractor Tests
- Heroku Deployment
Démonstration
Une démonstration de Micronaut est disponible ici
Bibliographie
- https://micronaut.io/
- https://docs.micronaut.io/1.0.0/guide/index.html
- https://simply-how.com/quarkus-vs-micronaut
- https://desosa.nl/projects/micronaut/2020/03/17/from-vision-to-architecture.html#sec-runtime-view
- https://opentracing.io/docs/overview/what-is-tracing/#:~:text=Distributed%20tracing%2C%20also%20called%20distributed,and%20what%20causes%20poor%20performance.
- https://objectcomputing.com/case-studies/case-study-from-monolith-to-microservices-with-micronaut
- https://github.com/jhipster/generator-jhipster-micronaut
- https://objectcomputing.com/files/8415/4220/9027/18-11-14-Intro-Micronaut-Webinar-slide-deck.pdf
- https://desosa.nl/projects/micronaut/2020/04/09/microservices-in-detail.html