Projet

Général

Profil

Actions

Feature #545

fermé

Test du système avec Rabbit MQ

Ajouté par Andry RANDRIAMANAMIHAJA il y a environ 2 mois. Mis à jour il y a environ 2 mois.

Statut:
Clos
Priorité:
Normal
Version cible:
-
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

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

  1. YAS ouvre une connexion TCP vers RabbitMQ sur le port 5672
  2. RabbitMQ accepte la connexion et répond "Connecté"
  3. YAS crée un channel (canal de communication virtuel)
  4. YAS déclare la queue "solde_updates" avec l'option durable
  5. RabbitMQ confirme que la queue existe et est prête

    Worker se connecte à RabbitMQ
  6. Worker ouvre une connexion TCP vers RabbitMQ sur le port 5672
  7. RabbitMQ accepte la connexion et répond "Connecté"
  8. Worker crée un channel pour recevoir des messages
  9. Worker déclare la queue "solde_updates" (vérifie qu'elle existe)
  10. RabbitMQ confirme que la queue existe

    Worker s'enregistre comme consommateur
  11. Worker configure prefetch(1) : "Je veux 1 seul message à la fois"
  12. RabbitMQ confirme : "OK, je t'enverrai 1 message à la fois"
  13. Worker s'enregistre avec 
consume() : "Je suis prêt à recevoir des messages"
  14. RabbitMQ enregistre le Worker comme consommateur actif avec un tag unique (ex: "ctag-1")
  15. RabbitMQ vérifie si la queue contient des messages (pour l'instant vide)

Premier Message
YAS envoie le Message 1

  1. Un client fait un paiement Airtel Money de 10000 AR
  2. YAS reçoit le webhook de confirmation d'Airtel Money
  3. YAS appelle 
publishSoldeUpdate() avec les données du paiement
  4. YAS convertit l'objet JavaScript en JSON puis en Buffer binaire
  5. YAS envoie le message via 
sendToQueue() vers la queue "solde_updates"
  6. Le message voyage sur le réseau TCP vers RabbitMQ

    RabbitMQ reçoit le Message 1
  7. RabbitMQ reçoit le message sur le réseau
  8. RabbitMQ écrit le message sur le disque (car 
persistent: true)
  9. RabbitMQ stocke le message dans la queue "solde_updates"
  10. RabbitMQ envoie un accusé de réception (ACK) à YAS
  11. YAS reçoit la confirmation et le callback est appelé
  12. YAS affiche " Message confirmé: MM25121510423167"

    RabbitMQ livre le Message 1 au Worker
  13. RabbitMQ détecte qu'un Worker est enregistré et prêt
  14. RabbitMQ vérifie le prefetch : le Worker peut recevoir 1 message
  15. RabbitMQ envoie le Message 1 au Worker via TCP
  16. Le message voyage sur le réseau vers le Worker

Worker traite le Message
Worker reçoit et traite

  1. Worker reçoit le message sur le réseau
  2. Le callback 
consume() est automatiquement appelé
  3. Worker affiche " Message reçu de RabbitMQ"
  4. Worker convertit le Buffer en String : 
msg.content.toString()
  5. Worker parse le JSON : 
JSON.parse(content)
  6. Worker affiche les données parsées
  7. Worker appelle 
processMessage(data, msg)

    Mise à jour de la base de données
  8. Worker ouvre une connexion PostgreSQL depuis le pool
  9. Worker démarre une transaction : 
BEGIN
  10. Worker exécute 
SELECT solde FOR UPDATE →  LOCK la ligne
  11. PostgreSQL retourne le solde actuel : 100000 AR
  12. Worker calcule le nouveau solde : 100000 + 10000 = 110000
  13. Worker exécute 
UPDATE solde = 110000
  14. Worker exécute 
UPDATE transaction SET soldeAvant=100000, soldeApres=110000
  15. Worker valide la transaction : 
COMMIT →  UNLOCK la ligne
  16. Worker libère la connexion PostgreSQL au pool

    Worker acknowledge le message
  17. Worker appelle 
channel.ack(msg) : "J'ai fini, tu peux supprimer"
  18. L'acknowledgement voyage sur le réseau vers RabbitMQ
  19. RabbitMQ reçoit l'ACK
  20. RabbitMQ supprime le Message 1 de la queue
  21. RabbitMQ vérifie le prefetch : le Worker peut recevoir un nouveau message
  22. Worker affiche " Succès: MM25121510423167 | Solde: 100000 → 110000"

Mis à jour par Johary RALAIHARIJAONA il y a environ 2 mois

  • % réalisé changé de 0 à 100
Actions

Formats disponibles : Atom PDF