📬
developpement

Message Queue

Systeme de messagerie asynchrone pour le decoupling entre services.

Definition

Une message queue (file de messages) est un composant logiciel qui permet la communication asynchrone entre services en stockant temporairement les messages dans une file d'attente. Le producteur envoie un message, la queue le stocke, et le consommateur le traite quand il est pret.

C'est un element fondamental des architectures microservices et des systemes distribues.

Pourquoi utiliser une message queue ?

  • Decoupling : les services n'ont pas besoin de se connaitre directement
  • Resilience : si le consommateur est en panne, les messages attendent dans la queue
  • Scalabilite : ajoutez des consommateurs pour traiter plus de messages en parallele
  • Lissage de charge : absorbe les pics de trafic sans surcharger les services en aval

Patterns de messaging

Point-to-Point (Queue)

Un message est consomme par un seul consommateur. Ideal pour la repartition de taches.

Pub/Sub (Topic)

Un message est diffuse a tous les abonnes. Ideal pour les notifications et l'event streaming.

Request-Reply

Le producteur attend une reponse du consommateur. Simule un appel synchrone de maniere asynchrone.

Solutions populaires

Solution Type Debit Persistance Cas d'usage
RabbitMQ Message broker Modere Optionnelle Task queues, RPC
Apache Kafka Event streaming Tres eleve Oui (log) Event sourcing, analytics
AWS SQS Queue geree Modere Oui Tasks async sur AWS
Redis Streams Leger Eleve Optionnelle Cache + messaging
NATS Lightweight Tres eleve Optionnelle Microservices, IoT

Exemple : RabbitMQ avec Node.js

// Producteur
const channel = await connection.createChannel();
await channel.assertQueue('emails');
channel.sendToQueue('emails', Buffer.from(JSON.stringify({
  to: 'user@exemple.com',
  subject: 'Bienvenue',
  template: 'welcome'
})));

// Consommateur
channel.consume('emails', async (msg) => {
  const email = JSON.parse(msg.content.toString());
  await sendEmail(email);
  channel.ack(msg); // confirmer le traitement
});

Dead Letter Queue (DLQ)

Quand un message echoue apres plusieurs tentatives, il est envoye dans une Dead Letter Queue pour analyse et retraitement manuel. C'est un filet de securite indispensable.

Garanties de livraison

  • At most once : le message peut etre perdu (rapide mais risque)
  • At least once : le message peut etre duplique (fiable, le plus courant)
  • Exactly once : chaque message est traite une seule fois (complexe, Kafka Transactions)

Besoin d'aide technique ?

Decrivez votre projet pour des conseils personnalises par nos experts.

Recevoir des conseils

Questions frequentes

RabbitMQ ou Kafka ?
RabbitMQ pour les task queues classiques (emails, jobs async) avec routage intelligent. Kafka pour l'event streaming haute performance (logs, analytics, event sourcing). Kafka est plus complexe mais plus puissant a grande echelle.
SQS ou RabbitMQ sur AWS ?
SQS si vous voulez zero maintenance (fully managed). RabbitMQ si vous avez besoin de routage avance (exchanges, bindings) ou si vous etes multi-cloud.
Comment gerer les messages en double (idempotence) ?
Utilisez un identifiant unique par message et verifiez en base si le message a deja ete traite avant de l'executer. C'est le pattern 'idempotent consumer'.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.