Cette partie présente des utilisations de Vert.x dans divers contextes.
Boiler Vroom
Cette démo présentée par Julien Ponge est une application Vert.x conçue autour du logiciel de mixage audio Traktor. Cette application consiste à utiliser Vert.x pour permettre à des utilisateurs d’interagir avec le logiciel Traktor à travers une interface web qui leur permet d’envoyer des signaux de mixage vers Traktor et de recevoir en streaming le son audio mixé sur Traktor. C’est une bonne illustration de la capacité de routage de Vert.x à travers l’event bus.
Le code de l’application est disponible sur GitHub : https://github.com/jponge/boiler-vroom
Outils et composants
Le système basé sur les outils et composants de la figure 5.1.
Figure 5.1 : Outils et composants de Boiler Vroom
Figure 5.2 : Interface de Traktor
Figure 5.3 : Ici l'interface de Boiler Vroom
Fonctionnement du streaming
L’interface de Boiler Vroom permet à l’utilisateur d’écouter en streaming le résultat du mixage envoyé par Traktor. Cet envoi n’est cependant pas fait directement, comme on peut le voir sur la figure 5.4.
Figure 5.4 : Processus de streaming
Tracktor est configuré pour diffuser un son encodé en Ogg Vorbis (seul format de sortie de Traktor) vers un serveur IceCast dans un premier temps (figure 5.5). Le support du format Ogg Vorbis n’étant pas répandu, nous avons voulu le convertir en MP3 qui est un format largement supporté. L’application VLC est utilisée pour convertir le flux en sortie de IceCast vers un flux exposé sur un serveur HTTP. Boiler Vroom se met alors à l’écoute du flux diffusé par VLC et le publie continuellement sur l’event bus de Vert.x. Et lorsqu’un client(web) de Boiler Vroom active le bouton de streaming, le serveur de Boiler Vroom envoie au client à travers HTTP le flux de streaming qu’il récupère de l’event bus de Vert.x. (figure 4.4)
Figure 5.5 : Diffusion du flux de Traktor vers un serveur IceCast
Fonctionnement du mixage interactif
Boiler Vroom permet aussi à ses utilisateurs d’interagir avec l’instance de Traktor liée à l’application en effectuant du mixage à travers l’envoi de signaux audio MIDI. Là encore, c’est à travers l’event bus Vert.x que les clients(web) envoient des messages typés en fonction du type de signal MIDI à transmettre à Traktor. Un composant de Boiler Vroom ayant accès aux interfaces MIDI de traktor en entrée et en sortie va consommer les messages des clients en les interprétant correctement et en les envoyant en signaux MIDI à Traktor à travers le protocole Web MIDI (figure 5.6).
Traktor intègre alors les signaux MIDI à leur réception et les applique au mixage en cours. Le son obtenu en résultat se diffuse en continu vers IceCast. Converti en MP3 avec VLC et diffusé sur l’event bus pour être envoyé vers les utilisateurs ayant activé le streaming, comme nous venons de le voir.
Mais Boiler Vroom ne fait pas qu’envoyer des signaux MIDI à Traktor. Elle écoute aussi sur le port MIDI de Traktor les signaux que celui-ci y envoie (figure 4.6). Ces signaux reçus sont aussi On interprète et diffuse les signaux sur l’event bus de Vert.x dans un format de message compréhensible par les clients (web). Les clients de Boiler Vroom qui écoutent sur l’event bus vont interpréter ces messages. Et ainsi mettre à jour les positions de leurs contrôles graphiques de mixage pour se synchroniser et refléter l’état actuel du mixage sur Traktor.
Figure 5.6 : Mixage Interactif
Code source de Boiler Vroom
Le code source de Boiler Vroom est accessible sur GitHub : https://github.com/jponge/boiler-vroom
SockJS et SockJS event bus bridge
Nous ne l’avons pas précisé, mais il est intéressant de savoir que c’est grâce au bridge SockJS reposant sur la librairie SockJs que l’event bus peut être étendu aux clients web. SockJS est une librairie JavaScript qui sait s’adapter en fonction de l’environnement pour fournir une interface de communication de type WebSocket. En plus de la librairie client JavaScript, il existe plusieurs implémentations de serveurs compatibles avec ce client, comme celle fournie dans Vert.x., ou pour Node.js, Erlang, etc.
Démo 2 : The Vert.x TCP event bus bridge
La deuxième démo présentée par Sébastien Blanc porte sur le TCP bridge de l’event bus en Java, qui comme le bridge SockJS, permet d’étendre l’event bus à des nœuds en dehors du cluster Vert.x. L’effort de Sébastien a été de construire une API semblable à celle de l’event bus au-dessus du protocole du TCP bridge. Son travail est disponible sur son GitHub : https://github.com/sebastienblanc/vertx-java-tcp-eventbus-bridge. Sinon fonctionnellement, la démo consiste à interagir avec un robot embarquant du Linux, à travers donc le TCP bridge, à partir d’un programme Java classique ou d’un client Android. Il a aussi ajouté à ce système toujours à travers le TCP bridge un raspberrypi pour allumer une LED.
Figure 5.7 : Architecture construite au tour du TCP bridge
Démo 3 : Contexte « entreprise »
Ce cas d’utilisation est présenté par Raphaël Luta qui évoque l’usage de Vert.x dans le cadre d’un de ses projets pour exposer à travers des services REST ou diffuser avec des SSE les données produites au bout d’une chaine de transformation de données. Leur choix se porte sur Vert.x pour deux ou trois raisons :
Utilisée dans une chaine de streaming, Vert.x dispose d’APIs pratiques pour gérer les problématiques inhérentes à ce mode d’échange (essentiellement back-pressure),
La possibilité de développer des services distribués à travers l’event bus,
La possibilité de les déployer dans la même JVM lorsqu’il n’y a pas de contraintes spécifiques.
Figure 5.8 : Utilisation de Vert.x pour faire du REST et du streaming
Démo 4 : Vert.X, Polyglot + IOT
Dans cette dernière démo, Philippe Charrière présente trois cas d’usage de Vert.x dans un contexte IOT avec les implémentations Golo et Scala de la librairie.
1er cas d’usage : clignotement de LED
Outils de la démo
Golo : langage dynamique pour la JVM, projet hébergé par la fondation Eclipse.
PI4J : Librairie d’I/O pour les Raspberry Pi.
Vert.x
Cette démo consiste à faire clignoter des LED connectées à un Raspberry Pi à partir d’un client web. Le serveur web écrit avec l’implémentation Golo de Vert.x se déploie donc sur le Raspberry Pi. Et il interprète les requêtes pour faire clignoter les LED grâce à la librairie PI4J.
Figure 5.9 : Clignotement de LED
2eme cas d’usage : simulation d’une passerelle de capteurs
Outils de la démo
Scala
Vert.x
La démo consiste à simuler une passerelle IoT pour un ensemble de capteurs de température domestique. Ecrite en Scala avec son implémentation Vert.x, la démo consiste à simuler les capteurs avec des fonctions générant aléatoirement des températures, et à exposer ces fonctions dans des services REST écrits en Vert.x.
3eme cas d’usage : simulation d’une passerelle de capteurs avec utilisation de MQTT
Outils de la démo
Scala
Vert.x
MQTT (Message Queuing Telemetry Transport) est un protocole de communication de type publish/subscribe adapté au monde de l’IoT. Les implémentations utilisées pour cette démo sont :
o Vert.x MQTT : comme broker MQTT. o Eclipse Paho : comme client MQTT en Java. o MQTT.js : client MQTT pour JavaScript.
La démo consiste encore une fois à simuler une passerelle de capteurs de température. Mais cette fois en connectant les capteurs à un broker MQTT, vers lequel ils publieront les températures.
Figure 5.10 : Clients MQTT communicant à travers le broker MQTT
Dans cette démo, les capteurs sont encore une fois simulés par des objets Scala produisant des valeurs de température aléatoires. Les clients MQTT utilisant Paho publient continuellement ces températures aléatoires vers le broker MQTT basé sur Vert.x MQTT.
Figure 5.11 : Publication et consommation de données à travers le broker MQTT.
MQTT.js est un client MQTT en JavaScript utilisable dans Node.js ou dans le navigateur. Même si le speaker avouera ne pas avoir réussi à le faire fonctionner dans un navigateur. Il l’a plutôt utilisé dans Node.js côté serveur. Ceci pour récupérer les températures publiées par les capteurs et les rendre disponibles au client web qui illustre leurs évolutions avec des courbes (figure 5.12).
Figure 5.12 : Souscription au broker MQTT avec JavaScript dans un navigateur.