Projet final du cours de RabbitMQ
- Présentation du projet
- 🎯 Objectif du projet
- 🏙️ Architecture du projet
- 💡 Technologies utilisées
- 🔩 Configuration
- Choix 1 : Initialisation du projet avec docker
- Choix 2 : Initialisation du projet
- 🛠️ Utilisation
- ✨ Fonctionnalités implémentées
- 🧑💻 Contributeurs
Dans le cadre des recherches, L’institut de physique nucléaire NGI souhaite mettre en place un système de calcul distribué capable de traiter des opérations mathématiques complexes. Une consultation a été lancée auprès de fournisseurs potentiels afin d’évaluer leurs compétences techniques. Chaque fournisseur est invité à proposer une preuve de concept sous forme d’un prototype simple permettant d’exécuter, distribuer et afficher des calculs à l’aide d’un système de files d’attente.
Ce projet repond ainsi à cette demande.
L'objectif de ce projet est :
- Distribuer des tâches de calculs (all,add, div, mul, sub) via RabbitMQ
- Traiter ces taches grâce aux workers spécialisés
- Exécuter les calculs de manière distribuée
- Récupérer et afficher les résultats dans une interface simple.
Notre projet se divise en 3 types de composants :
- Consumers : reçoivent les résultats des calculs et les transmettent à l’interface utilisateur pour affichage.
- Workers : récupèrent les tâches depuis la file et effectuent les opérations mathématiques correspondantes.
- Producer : envoie des tâches de calcul à exécuter dans une file RabbitMQ.
- RabbitMQ — Système de gestion de files de messages (AMQP)
- Node.js — Environnement d'exécution JavaScript côté serveur
- amqplib — Bibliothèque Node.js pour interagir avec RabbitMQ
- Websocket
- Express
Créez un fichier .env à la racine du projet avec vos informations de connexion à RabbitMQ et un mot de passe afin de pouvoir lancer les commandes dans le terminal :
RABBITMQ_URL=amqp://exemple:exemple@hotsname.vhost:portVous pouvez prendre exemple sur .env.example
cd projet-rabbitmq
docker compose -f Docker/docker-compose.yml up --buildcd projet-rabbitmq
npm i Afin d'utiliser le frontend, nous allons laisser de côté le producer.js nous allons à la place utiliser api.js.
Lancer l'api :
cd src
node api.jsLancer le producer :
cd src
cd producers
node producer.jsAprès avoir choisi une des deux options, poursuivre les étapes suivantes.
Aller dans le dossier worker
cd src
cd workers
node add.jsLancer chaque worker :
- Addition (add) node add.js
- Soustraction (sub) node sub.js,
- Division (div) node div.js,
- Multiplication (mul) node mul.js,
- Tous les workers (all) node all.js,
cd src
cd consumers
node consumer.jsAccéder à l’affichage des résultats, aller sur l’url suivante : http://localhost:3000/
Une fois le système en place et tous les composants démarrés :
- Le producer va automatiquement générer des requêtes de calcul et les envoyer aux workers appropriés.
- Les workers vont traiter les calculs (avec un délai aléatoire de 5 à 15 secondes pour simuler un calcul complexe).
- Le consumer va afficher les résultats des calculs au fur et à mesure qu'ils sont disponibles.
Pour arrêter chaque composant, utilisez Ctrl+C dans le terminal correspondant.
- L'utilisateur renseigne 2 nombres, un type d'opération
- Il lance le calcul
- Les workers vont traiter les calculs (avec un délai aléatoire de 5 à 15 secondes pour simuler un calcul complexe).
- Le consumer va envoyer les résultats des calculs au frontend via un websocket.
- Les résultats sont affichés.
Pour arrêter chaque composant, utilisez Ctrl+C dans le terminal correspondant.
✅ Génération automatique d'opérandes et envoi de requêtes ✅ Traitement des calculs par les workers avec simulation de délai ✅ Affichage des résultats par le consumer
✅ Spécialisation des workers par type d'opération (add, sub, mul, div) ✅ Génération aléatoire du type d'opération
✅ Support de l'opération "all" envoyant la même requête à tous les workers ✅ Génération aléatoire incluant l'opération "all"
✅ Indexation des opérations pour un suivi plus facile ✅ Affichage du formulaire de calcul ✅ Affichage du résultat de l'opération
- MANCEAU Arthur
- BESROUR Rayane
- KTOURZA Noemie
- LE FORMAL Guillaume

