Projet

Général

Profil

Actions

Feature #549

fermé

Installation en local de RabbitMQ

Ajouté par Johary RALAIHARIJAONA il y a un jour. Mis à jour il y a environ 24 heures.

Statut:
Clos
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
08 jan. 2026
Echéance:
08 jan. 2026
% réalisé:

100%

Temps estimé:
(Total: 0:00 h)

Sous-tâches 2 (0 ouverte2 fermées)

Feature #550: Test d'alimentation des données dans RabbitMQClosJohary RALAIHARIJAONA08 jan. 202608 jan. 2026

Actions
Feature #551: Modification des api de paiements pour alimenter le RabbitMQClosJohary RALAIHARIJAONA08 jan. 202608 jan. 2026

Actions

Mis à jour par Johary RALAIHARIJAONA il y a un jour

  • Sous-tâches #550 ajouté

Mis à jour par Johary RALAIHARIJAONA il y a un jour

  • Sous-tâches #551 ajouté

Mis à jour par Johary RALAIHARIJAONA il y a un jour

  • Statut changé de Nouveau à In Progress / En cours

Mis à jour par Johary RALAIHARIJAONA il y a environ 24 heures

  • Statut changé de In Progress / En cours à Clos

┌──────────────────┐
│ FLUX DE PAIEMENT │
└──────────────────┘

1- CLIENT fait un paiement Mobile Money

2- SERVEUR YAS 1 ou 2

  • Reçoit notification webhook du PSP (Airtel/Orange)
  • Valide le paiement
  • Au lieu de MAJ directe du solde
  • Envoie message à RabbitMQ

    3 - RABBITMQ (Queue: solde_updates)
  • Stocke les messages de manière durable
  • Garantit l'ordre FIFO
  • 1 seul consommateur (prefetch=1)

    4 - WORKER VPI-SOLDE (processus séparé)
  • Consomme les messages UN PAR UN
  • Lock PostgreSQL (FOR UPDATE)
  • Met à jour le solde de manière atomique
  • Acknowledge le message après succès

    5- BASE DE DONNÉES PostgreSQL
  • Solde mis à jour correctement
  • Transaction enregistrée avec soldeAvant/soldeApres


YAS/
├── services/rabbitmq/
│ └── rabbitmqService.js # Publisher RabbitMQ
├── controllers/api/mobileMoney/
│ └── mobileMoneyChoiceController.js # Appelle publishSoldeUpdate()
├── app.js # Initialise RabbitMQ au démarrage
└── test_rabbitmq_airtel_simulation.js # Script de test


vpi-solde-worker/
├── index.js # Point d'entrée du worker
├── services/
│ ├── rabbitmqService.js # Consumer RabbitMQ
│ └── databaseService.js # Mise à jour solde avec lock
├── .env # Configuration
└── package.json


┌──────────────────────┐
│ FLUX RABBITMQ COMPLET │
└──────────────────────┘

1- YAS reçoit webhook Airtel Money

2- YAS : publishSoldeUpdate()
├─ Crée objet message
├─ Convertit en Buffer (JSON → binaire)
├─ sendToQueue('solde_updates', buffer, {persistent: true})
└─ Attend confirmation de RabbitMQ

3- RabbitMQ reçoit le message
├─ Écrit sur disque (persistent: true)
├─ Envoie confirmation à YAS
└─ Stocke dans queue 'solde_updates'

4- RabbitMQ → Worker (si prefetch permet)
├─ Envoie 1 message (prefetch = 1)
└─ Attend ack() avant d'envoyer le suivant

5- Worker reçoit le message
├─ Parse JSON
├─ Appelle callback(data, msg)
└─ Traite le message

6- Worker : updateSolde()
├─ BEGIN transaction PostgreSQL
├─ SELECT ... FOR UPDATE (lock)
├─ UPDATE solde
├─ UPDATE transaction
└─ COMMIT

7- Worker : ack(msg)
└─ RabbitMQ supprime le message

8- RabbitMQ envoie le message suivant
└─ Retour à l'étape 4

Actions

Formats disponibles : Atom PDF