📬
developpement

Message Queue

Système de messagerie asynchrone pour le decoupling entre services.

Définition

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 prêt.

C'est un élément fondamental des architectures microservices et des systèmes distribues.

Pourquoi utiliser une message queue ?

  • Decoupling : les services n'ont pas besoin de se connaître directement
  • Résilience : si le consommateur est en panne, les messages attendent dans la queue
  • Scalabilité : ajoutez des consommateurs pour traiter plus de messages en parallèle
  • 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. Idéal pour la répartition de tâches.

Pub/Sub (Topic)

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

Request-Reply

Le producteur attend une réponse du consommateur. Simule un appel synchrone de manière asynchrone.

Solutions populaires

Solution Type Debit Persistance Cas d'usage
RabbitMQ Message broker Modéré Optionnelle Task queues, RPC
Apache Kafka Event streaming Très élevé Oui (log) Event sourcing, analytics
AWS SQS Queue gérée Modéré Oui Tasks async sur AWS
Redis Streams Léger Eleve Optionnelle Cache + messaging
NATS Lightweight Très élevé 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 après plusieurs tentatives, il est envoye dans une Dead Letter Queue pour analyse et retraitement manuel. C'est un filet de sécurité indispensable.

Garanties de livraison

  • At most once : le message peut être perdu (rapide mais risque)
  • At least once : le message peut être 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 fréquentes

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 liées

Chaque semaine, le meilleur de la tech française

Tendances, salaires, outils et opportunités — directement dans votre boîte mail.

Gratuit. Desabonnement en un clic. Pas de spam.