--- 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 ?