RabbitMQ Visualizer
Un outil pour comprendre comment les messages circulent dans RabbitMQ. Il transforme les files, les points de routage et leurs connexions en une carte interactive, depuis une instance ou un export de configuration.
Contexte
Dans RabbitMQ, un message peut passer par plusieurs points de routage avant d’arriver dans une file, être renvoyé vers une autre destination ou entrer dans un circuit de nouvelle tentative. Lorsque ces liens se multiplient, les retrouver dans des listes séparées devient difficile.
J’ai conçu RabbitMQ Visualizer pour réunir ces relations dans une carte que l’on peut explorer. L’objectif est d’aider à lire une installation existante, à expliquer son organisation et à repérer les chemins prévus pour les messages.
Conception
Lire une installation comme une carte
On choisit un espace RabbitMQ, appelé vhost, puis le visualiseur présente ses exchanges, ses files et les consommateurs observés lors de la collecte. Les couleurs distinguent les éléments et les types de relations. Les clés de routage sont affichées sur les liens pour comprendre ce qui relie les différentes parties du système.
La carte inclut les destinations alternatives pour les messages non routés et les circuits de dead letter, utilisés notamment pour les messages rejetés ou les nouvelles tentatives. Ces chemins sont déduits de la configuration ; le graphe ne montre pas des messages individuels en train de circuler.
Explorer sans perdre le fil
La recherche met en évidence les éléments correspondants et leurs relations. Le survol permet de se concentrer sur les voisins d’un élément. Zoom, recentrage et plein écran facilitent la lecture, tandis que le déplacement des nœuds permet de dégager une zone dense du graphe.
J’ai séparé la construction du schéma de son affichage : D3.js gère le rendu et les interactions, et Dagre propose la disposition initiale. Cette organisation permet de vérifier les relations indépendamment de leur position à l’écran.
Choisir comment accéder aux données
Deux parcours sont disponibles. La connexion directe lit l’API de gestion RabbitMQ depuis le navigateur. L’import d’un fichier de définitions JSON permet d’explorer une configuration sans accès au serveur. Dans ce second cas, les consommateurs actifs ne sont pas disponibles, car ils ne font pas partie de l’export.
Le site est statique : l’hébergement du visualiseur ne reçoit ni les identifiants ni les données RabbitMQ. La connexion directe reste soumise aux droits de l’utilisateur et à l’autorisation de l’origine du site par l’instance RabbitMQ.
Retrouver une carte plus tard
Les connexions récentes et les schémas collectés sont conservés dans le navigateur. On peut ainsi rouvrir une carte hors connexion, sans enregistrer le mot de passe. Pour obtenir un nouvel état, il faut se reconnecter et demander un rafraîchissement.
Cette distinction est essentielle : une carte sauvegardée représente la dernière collecte, y compris pour les consommateurs. Elle aide à retrouver une configuration, mais ne remplace pas une supervision en temps réel.
Fonctionnalités
- Navigation entre les vhosts accessibles et leurs topologies
- Connexion à l’API de gestion ou import local d’un export JSON
- Affichage des bindings, destinations alternatives et dead letters
- Recherche, mise en évidence des voisins, zoom et déplacement des nœuds
- Réouverture locale des schémas précédemment collectés
- Thèmes clair et sombre
Validation et avancement
Le visualiseur est accessible en ligne. Le dépôt contient des tests sur la lecture des exports, les appels API, les relations du graphe et la conservation locale des schémas. Une démonstration Docker isolée fournit plusieurs topologies avec des données synthétiques, sans utiliser une installation de production.
Le produit se concentre sur la consultation de la topologie. Il ne propose pas d’éditer les files ou les exchanges, ni de suivre le contenu des messages.
Visuels
La capture présente le vhost de notifications de la démonstration du projet : on y distingue une boucle de nouvelle tentative, une destination de messages en échec et un consommateur actif au moment de la collecte. Toutes les données affichées sont synthétiques.