🐰 RabbitMQ, c’est quoi ?
RabbitMQ est un message broker (ou middleware de messagerie) qui permet à des applications de communiquer entre elles de façon asynchrone, en s’échangeant des messages via des files d’attente (queues).
🧠 En résumé :
RabbitMQ est comme un facteur :
-
Une application A envoie un message (comme une lettre)
-
RabbitMQ stocke ce message dans une file d’attente
-
Une application B vient lire et traiter ce message plus tard
🧩 À quoi ça sert ?
-
Désynchroniser les traitements (éviter que tout soit bloqué en temps réel)
-
Améliorer la scalabilité d’une application (traiter plus de tâches en parallèle)
-
Fiabiliser les échanges entre composants logiciels
🛠️ Exemple concret avec C#/.NET :
Tu as un site e-commerce :
-
Quand un utilisateur passe commande, tu ne veux pas bloquer l’interface pendant l’envoi de l’email de confirmation.
-
Tu envoies un message à RabbitMQ : "Envoyer l’email de confirmation"
-
Un service en arrière-plan lit les messages dans RabbitMQ et envoie les emails un par un
⚙️ Technologies souvent utilisées avec RabbitMQ :
-
C# / .NET avec la bibliothèque RabbitMQ.Client
-
Peut aussi être utilisé avec Java, Python, Node.js, etc.
-
Utilise souvent des formats de message comme JSON ou XML
🧪 Modèle de communication :
RabbitMQ fonctionne avec les concepts suivants :
-
Producer : celui qui envoie un message
-
Queue : la file d’attente où les messages sont stockés
-
Consumer : celui qui lit les messages
-
Exchange : le "routeur" qui décide dans quelle file envoyer le message
🧠 1. Concepts clés de RabbitMQ (architecture)
RabbitMQ suit le modèle "Publisher/Consumer" :
🧱 Les composants de base :
Élément | Rôle |
---|---|
Producer | Envoie un message |
Exchange | Reçoit le message du producer et le dirige vers une ou plusieurs queues |
Queue | Stocke les messages |
Consumer | Reçoit les messages depuis une queue et les traite |
🔁 2. Types d’Exchanges (routeurs)
Un Exchange dirige les messages vers les files d’attente. Il en existe plusieurs types :
Type | Description |
---|---|
direct |
Envoie à une queue avec un nom précis |
fanout |
Envoie à toutes les queues liées |
topic |
Envoie à des queues selon des modèles (wildcards) |
headers |
Route par en-têtes de message, moins utilisé |
🧪 3. Exemple pratique en C# (.NET 6/7)
🧰 Prérequis :
-
RabbitMQ installé localement ou via Docker
-
NuGet package :
RabbitMQ.Client
✅ Étape 1 : Producer (envoi du message)
using RabbitMQ.Client;
using System.Text;
var factory = new ConnectionFactory() { HostName = "localhost" };
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();
channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null);
string message = "Hello RabbitMQ!";
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body);
Console.WriteLine($"[x] Sent: {message}");
✅ Étape 2 : Consumer (réception du message)
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System.Text;
var factory = new ConnectionFactory() { HostName = "localhost" };
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();
channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
Console.WriteLine($"[x] Received: {message}");
};
channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer);
Console.WriteLine("Press [enter] to exit.");
Console.ReadLine();
🐳 Tu veux utiliser Docker ?
Voici une commande Docker pour lancer RabbitMQ avec interface Web :
docker run -d --hostname my-rabbit --name rabbitmq \
-p 5672:5672 -p 15672:15672 \
rabbitmq:3-management
-
Interface Web : http://localhost:15672
-
Login par défaut :
guest
/guest
🧵 Scénarios d'utilisation typiques
-
Traitement d’e-mails en arrière-plan
-
Envoi de notifications push
-
Pipeline de traitement d’image
-
Traitement de logs / analytics
🔍 Aspects possibles à approfondir dans RabbitMQ :
-
Les types d’
Exchange
(direct, fanout, topic, headers) -
La gestion des accusés de réception (
ack
) et de la fiabilité -
La persistance des messages / queues (
durable
,persistent
) -
La gestion des erreurs (retry, dead-letter exchange)
-
L’utilisation avec plusieurs
consumers
(load balancing) -
L'utilisation d’un
topic exchange
avec routing par wildcard -
Performance et bonnes pratiques
-
Comment faire un traitement en file d’attente avec retry / délai
-
Sécurité (authentification, SSL, etc.)
-
Monitoring et métriques via l’interface Web ou Prometheus
Aucun commentaire:
Enregistrer un commentaire