implémenter une architecture événementielle SaaS ERP-CRM node.js avec RabbitMQ
28/07/2025
architecture événementielle SaaS ERP-CRM Node.js avec RabbitMQ
Dans un SaaS ERP-CRM, les modules de gestion des commandes, facturation ou notification doivent communiquer de façon fiable et scalable. Adopter une architecture événementielle basée sur RabbitMQ permet de découpler vos services Node.js, d’améliorer la résilience et de monter en charge sans impacter les performances globales.
1. déployer RabbitMQ avec Docker
Utilisez l’image officielle pour démarrer rapidement une instance de RabbitMQ avec interface de management :
docker run -d \
--hostname crm-broker \
--name rabbitmq \
-p 5672:5672 \
-p 15672:15672 \
rabbitmq:3-management
Vérifiez le dashboard http://localhost:15672 (user/password : guest/guest).
2. configurer la connexion Node.js
- Installer la librairie
amqplib
:npm install amqplib
- Initialiser la connexion :
const amqp = require('amqplib');
async function createChannel() {
const conn = await amqp.connect('amqp://localhost');
const channel = await conn.createChannel();
await channel.assertExchange('events', 'topic', { durable: true });
return channel;
}
3. publier et consommer des événements
Exemple de publisher qui diffuse l’événement order.created
:
async function publishOrder(order) {
const channel = await createChannel();
const routingKey = 'order.created';
channel.publish('events', routingKey, Buffer.from(JSON.stringify(order)), {
persistent: true
});
console.log('Event envoyé:', routingKey);
}
Exemple de consumer :
async function consumeOrders() {
const channel = await createChannel();
const q = await channel.assertQueue('orders_queue', { durable: true });
await channel.bindQueue(q.queue, 'events', 'order.*');
channel.consume(q.queue, msg => {
const event = JSON.parse(msg.content.toString());
console.log('Événement reçu:', msg.fields.routingKey, event);
// traitement métier...
channel.ack(msg);
}, { noAck: false });
}
4. bonnes pratiques performance et sécurité
- Préfetch limité (
channel.prefetch(10)
) pour contrôler la concurrence. - Activer TLS sur RabbitMQ en production pour chiffrer les échanges.
- Utiliser les publisher confirms pour garantir la persistance des messages.
- Surveiller les métriques RabbitMQ via le plugin management et exporter vers Prometheus.
5. mesurer la scalabilité
Exemple de seuils à viser pour un ERP-CRM en PME :
Métrique | Objectif |
---|---|
Débit de messages (msg/s) | ≥ 5 000 |
Temps de latence (publish→consume) | < 10 ms |
Pour scaler, ajoutez simplement de nouveaux workers ou répartissez les queues sur plusieurs nodes RabbitMQ en cluster.
bonnes pratiques complémentaires
- Documentez vos routing keys et schémas d’événements pour éviter les collisions.
- Testez les workflows avec des tests d’intégration (par ex.
jest
+ RabbitMQ en Docker). - Intégrez ce pattern à votre pipeline CI/CD (GitHub Actions ou Jenkins).
En adoptant ce modèle événementiel, votre ERP-CRM SaaS gagne en flexibilité et en performance. Pour un accompagnement sur-mesure, contactez notre équipe.