Actions
Feature #545
ferméTest du système avec Rabbit MQ
Début:
08 jan. 2026
Echéance:
08 jan. 2026
% réalisé:
100%
Temps estimé:
Description
Mise à jour des codes entre la fin des transactions et l'enregistrement dans la BD
Actions
#1
Mis à jour par Johary RALAIHARIJAONA il y a environ 2 mois
- Sujet changé de Intégration de rabbitMq à Test du système avec Rabbit MQ
- Statut changé de Nouveau à Clos
FLUX COMPLET
YAS se connecte à RabbitMQ
- YAS ouvre une connexion TCP vers RabbitMQ sur le port 5672
- RabbitMQ accepte la connexion et répond "Connecté"
- YAS crée un channel (canal de communication virtuel)
- YAS déclare la queue "solde_updates" avec l'option durable
- RabbitMQ confirme que la queue existe et est prête
Worker se connecte à RabbitMQ - Worker ouvre une connexion TCP vers RabbitMQ sur le port 5672
- RabbitMQ accepte la connexion et répond "Connecté"
- Worker crée un channel pour recevoir des messages
- Worker déclare la queue "solde_updates" (vérifie qu'elle existe)
- RabbitMQ confirme que la queue existe
Worker s'enregistre comme consommateur - Worker configure prefetch(1) : "Je veux 1 seul message à la fois"
- RabbitMQ confirme : "OK, je t'enverrai 1 message à la fois"
- Worker s'enregistre avec consume() : "Je suis prêt à recevoir des messages"
- RabbitMQ enregistre le Worker comme consommateur actif avec un tag unique (ex: "ctag-1")
- RabbitMQ vérifie si la queue contient des messages (pour l'instant vide)
Premier Message
YAS envoie le Message 1
- Un client fait un paiement Airtel Money de 10000 AR
- YAS reçoit le webhook de confirmation d'Airtel Money
- YAS appelle publishSoldeUpdate() avec les données du paiement
- YAS convertit l'objet JavaScript en JSON puis en Buffer binaire
- YAS envoie le message via sendToQueue() vers la queue "solde_updates"
- Le message voyage sur le réseau TCP vers RabbitMQ
RabbitMQ reçoit le Message 1 - RabbitMQ reçoit le message sur le réseau
- RabbitMQ écrit le message sur le disque (car persistent: true)
- RabbitMQ stocke le message dans la queue "solde_updates"
- RabbitMQ envoie un accusé de réception (ACK) à YAS
- YAS reçoit la confirmation et le callback est appelé
- YAS affiche " Message confirmé: MM25121510423167"
RabbitMQ livre le Message 1 au Worker - RabbitMQ détecte qu'un Worker est enregistré et prêt
- RabbitMQ vérifie le prefetch : le Worker peut recevoir 1 message
- RabbitMQ envoie le Message 1 au Worker via TCP
- Le message voyage sur le réseau vers le Worker
Worker traite le Message
Worker reçoit et traite
- Worker reçoit le message sur le réseau
- Le callback consume() est automatiquement appelé
- Worker affiche " Message reçu de RabbitMQ"
- Worker convertit le Buffer en String : msg.content.toString()
- Worker parse le JSON : JSON.parse(content)
- Worker affiche les données parsées
- Worker appelle
processMessage(data, msg)
Mise à jour de la base de données - Worker ouvre une connexion PostgreSQL depuis le pool
- Worker démarre une transaction : BEGIN
- Worker exécute SELECT solde FOR UPDATE → LOCK la ligne
- PostgreSQL retourne le solde actuel : 100000 AR
- Worker calcule le nouveau solde : 100000 + 10000 = 110000
- Worker exécute UPDATE solde = 110000
- Worker exécute UPDATE transaction SET soldeAvant=100000, soldeApres=110000
- Worker valide la transaction : COMMIT → UNLOCK la ligne
- Worker libère la connexion PostgreSQL au pool
Worker acknowledge le message - Worker appelle channel.ack(msg) : "J'ai fini, tu peux supprimer"
- L'acknowledgement voyage sur le réseau vers RabbitMQ
- RabbitMQ reçoit l'ACK
- RabbitMQ supprime le Message 1 de la queue
- RabbitMQ vérifie le prefetch : le Worker peut recevoir un nouveau message
- Worker affiche " Succès: MM25121510423167 | Solde: 100000 → 110000"
Actions