---
title: Message Queue
created: 2026-06-06
updated: 2026-06-06
type: concept
tags: [tech, architecture, devops]
confidence: high
contested: false
sources: [synthesized]
---
# 📨 Message Queue (File de Messages)

## Définition Courte
Composant d'architecture qui permet à des services d'**échanger des messages de manière asynchrone** via une file, découplant producteur et consommateur.

## Explication Détaillée
**Pattern de base** :
- **Producer** envoie un message à un **topic** ou **queue**.
- Le **broker** (le middleware) stocke le message de manière durable.
- Un ou plusieurs **consumers** reçoivent le message et le traitent.
- Si le consumer crashe, le message reste dans la queue et sera rejoué.

**Patterns avancés** :
- **Pub/Sub** : un message publié est lu par N consumers.
- **Work Queue** : un message traité par un seul consumer (load balancing).
- **Dead Letter Queue** : messages non traitables routés ailleurs.
- **Idempotence** : le consumer doit gérer les doublons.

**Garanties de livraison** :
- **At most once** : le message est livré 0 ou 1 fois (peut être perdu).
- **At least once** : livré au moins 1 fois (doublons possibles). **Le standard**.
- **Exactly once** : 1 fois, jamais plus. Très coûteux (Kafka transactions).

## Cas d'Usage
- Communication asynchrone entre microservices.
- Traitement de tâches lourdes en arrière-plan (envoi de mail, génération PDF).
- Découplage de pics (lissage de charge).
- Event Sourcing (cf. [[patterns-architecture]]).
- IoT : ingestion massive de capteurs.

## Outils Liés
- **Kafka** : le standard, throughput massif, durable.
- **RabbitMQ** : classique, AMQP, plus simple.
- **NATS** : léger, pub/sub natif, idéal cloud-native.
- **Redis Streams** : in-memory, rapide, simple.
- **AWS SQS/SNS**, **GCP Pub/Sub**.

## Pages Liées
- [[architecture-microservices]]
- [[patterns-architecture]]
- [[idempotence]]
- [[observabilite]]

## Questions Ouvertes
- Kafka est-il encore pertinent face à des solutions plus modernes (Redpanda, WarpStream) ?
- Comment tester correctement des workflows asynchrones ?
