Tous les produits
Search
Centre de documentation

ApsaraMQ for RabbitMQ:Dead-letter exchanges

Dernière mise à jour :Oct 09, 2026

Il arrive que des messages échouent : un consommateur les rejette, le nombre maximal de tentatives est atteint ou la durée de vie (TTL) expire. Plutôt que de perdre ces messages, un échange de lettres mortes (DLX) les capture et les achemine vers une file d'attente dédiée pour inspection, retraitement ou alerte.

Les sections suivantes présentent les concepts clés, le processus de routage, les méthodes de configuration et les en-têtes des lettres mortes pour ApsaraMQ for RabbitMQ.

Concepts clés

Terme Définition
Échange de lettres mortes Un échange qui reçoit les lettres mortes et les achemine vers une file d'attente de lettres mortes en fonction des clés de liaison, des clés de routage et des attributs d'en-tête. Tout type d'échange standard (direct, fanout, topic ou headers) peut servir d'échange de lettres mortes.
Clé de routage des lettres mortes La clé de routage utilisée pour acheminer une lettre morte. Si elle n'est pas spécifiée, le message conserve sa clé de routage d'origine.
Lettre morte Un message transféré vers un échange de lettres mortes. Consultez Quand les messages deviennent-ils des lettres mortes ? pour obtenir la liste complète des déclencheurs.
File d'attente de lettres mortes Une file d'attente liée à un échange de lettres mortes qui stocke les lettres mortes.

Quand les messages deviennent-ils des lettres mortes ?

Un message est envoyé vers l'échange de lettres mortes lorsque l'un des événements suivants se produit :

  • Accusé de réception négatif : un consommateur appelle basic.reject ou basic.nack avec requeue défini sur false.

  • Épuisement des nouvelles tentatives : la consommation du message échoue après 16 tentatives. Pour plus de détails, consultez Politiques de nouvelle tentative de consommation.

  • Expiration de la TTL : le message reste dans la file d'attente plus longtemps que la durée de vie (TTL) configurée. Pour plus de détails, consultez Durée de vie des messages (TTL).

Fonctionnement

  1. Un producteur publie un message vers un échange.

  2. L'échange achemine le message vers une file d'attente.

  3. Un consommateur extrait le message de la file d'attente.

  4. Le message devient une lettre morte : suite à un accusé de réception négatif, après 16 échecs de nouvelle tentative ou à l'expiration de sa TTL.

  5. La file d'attente transfère la lettre morte vers l'échange spécifié par x-dead-letter-exchange, en utilisant la clé de routage spécifiée par x-dead-letter-routing-key.

  6. L'échange de lettres mortes achemine le message vers la file d'attente de lettres mortes liée.

Dead-letter message routing flow

Remarques d'utilisation

  • Exigence de vhost identique : l'échange de lettres mortes et sa file d'attente liée doivent résider dans le même vhost. Le routage des lettres mortes entre différents vhosts n'est pas pris en charge.

  • Liaison DLX immuable : une fois qu'une file d'attente est créée avec un échange de lettres mortes, la configuration DLX ne peut pas être modifiée. Supprimez la file d'attente et créez-en une nouvelle avec la configuration mise à jour.

  • Aucune configuration DLX : si aucune file d'attente ne dispose d'un échange de lettres mortes configuré, les messages sont définitivement supprimés une fois le nombre maximal de tentatives de livraison (16 par défaut) dépassé. Si un échange de lettres mortes est configuré, les messages sont acheminés vers la file d'attente de lettres mortes correspondante.

Configurer un échange de lettres mortes

Configurez un échange de lettres mortes via la console ApsaraMQ for RabbitMQ, l'API CreateQueue ou un SDK client.

Console

Configurez un échange de lettres mortes lors de la création d'une file d'attente dans la console.

  1. Connectez-vous à la console ApsaraMQ for RabbitMQ.

  2. Sur la page Overview, dans la section Resource Distribution, sélectionnez une région.

  3. Sur la page Instances, cliquez sur le nom de l'instance cible.

  4. Dans le volet de navigation de gauche, cliquez sur Queues.

  5. Sur la page Queues, sélectionnez un vhost dans la liste déroulante Change située à côté de vhost, puis cliquez sur Create Queue.

  6. Dans le panneau Create Queue, définissez les paramètres suivants, puis cliquez sur OK.

Paramètre Description
Queue Name Nom de la file d'attente. Prend en charge les lettres, les chiffres, les traits d'union (-), les traits de soulignement (_), les points (.), les dièses (#), les barres obliques (/) et les arobases (@). Longueur : 1 à 255 caractères. Ne peut pas être modifié après la création. Le préfixe amq. est réservé et ne peut pas être utilisé.
Auto Delete Indique s'il faut supprimer automatiquement la file d'attente après la désabonnement du dernier consommateur. Valeurs valides : true, false.
Advanced Settings Cliquez pour développer. Configurez l'échange de lettres mortes et les paramètres associés :
- DeadLetterExchange L'échange qui reçoit les lettres mortes provenant de cette file d'attente.
- DeadLetterRoutingKey La clé de routage pour les lettres mortes. L'échange de lettres mortes utilise cette clé pour acheminer les messages vers la file d'attente de lettres mortes correspondante.
- MessageTTL La durée de vie (TTL) du message en millisecondes. Les messages non consommés dans ce délai deviennent des lettres mortes et sont transférés vers l'échange de lettres mortes. Pour plus de détails, consultez Durée de vie des messages (TTL).

API

Appelez l'opération CreateQueue avec les paramètres de l'échange de lettres mortes. Pour plus de détails, consultez CreateQueue.

Client SDK

Spécifiez x-dead-letter-exchange et x-dead-letter-routing-key dans les arguments de la file d'attente lors de la déclaration de celle-ci.

L'exemple Java suivant déclare un échange direct nommé some.exchange.name comme échange de lettres mortes avec demo-routing-key comme clé de routage des lettres mortes :

channel.exchangeDeclare("some.exchange.name", "direct");

Map<String, Object> args = new HashMap<String, Object>();
args.put("x-dead-letter-exchange", "some.exchange.name");
args.put("x-dead-letter-routing-key", "demo-routing-key");

channel.queueDeclare("MyQueue", false, false, false, args);

En-têtes des lettres mortes

Lorsqu'un message devient une lettre morte, ApsaraMQ for RabbitMQ ajoute des en-têtes de métadonnées pour suivre l'historique des événements.

En-têtes récapitulatifs

En-tête Description
x-first-death-exchange L'échange dans lequel se trouvait le message lors de son premier rejet.
x-first-death-queue La file d'attente dans laquelle se trouvait le message lors de son premier rejet.
x-first-death-reason La raison pour laquelle le message a été rejeté pour la première fois.
x-death-total Le nombre total de fois où le message a été rejeté.

Le tableau x-death

L'en-tête x-death est un tableau d'entrées, chacune enregistrant un événement de rejet avec les champs suivants :

Champ Description
reason Raison pour laquelle le message a été rejeté.
queue La file d'attente dans laquelle se trouvait le message lors du rejet.
exchange L'échange vers lequel le message a été publié avant d'être rejeté.
routing-keys Les clés de routage du message au moment du rejet.
count Nombre de fois où le message a été rejeté depuis cette file d'attente pour cette raison.
time Moment où le message a été rejeté.

Valeurs des raisons de rejet

Valeur Déclencheur
expired La TTL du message a expiré.
nack Le message a fait l'objet d'un accusé de réception négatif avec requeue défini sur false.
reject Le message a été rejeté avec requeue défini sur false.
Consumption limit exceeded Le message a échoué après 16 tentatives de nouvelle tentative.

Activer la TTL pour les files d'attente de lettres mortes

Par défaut, les messages d'une file d'attente de lettres mortes n'expirent pas, même si une TTL est configurée pour la file d'attente. Activez la fonctionnalité TTL au niveau de l'instance pour permettre aux lettres mortes de respecter le paramètre TTL de la file d'attente. Lorsque la TTL d'une lettre morte expire, elle est transférée vers le prochain échange de lettres mortes configuré.

Types d'instances pris en charge

La fonctionnalité TTL pour les files d'attente de lettres mortes est disponible sur les types d'instances suivants :

  • Serverless

  • Enterprise Edition (Subscription)

  • Platinum Edition (Subscription)

Procédure

  1. Sur la page Instances de la console ApsaraMQ for RabbitMQ, cliquez sur le nom de l'instance cible.

  2. Sur la page Instance Details, cliquez sur l'onglet Limits.

  3. Cliquez sur Activate à côté de TTL Feature Supported.

Important
  • Évitez de créer des boucles de routage de lettres mortes. Par exemple, si la file d'attente de lettres mortes de la file A est la file B et que celle de la file B est la file A, les messages bouclent indéfiniment. Si ApsaraMQ for RabbitMQ détecte une telle boucle sans événement de rejet, il désactive automatiquement la TTL pour les messages concernés afin d'arrêter la boucle.

  • Une lettre morte peut être routée entre les files d'attente un maximum de 16 fois. Après avoir atteint cette limite, la TTL est désactivée pour les messages concernés.

Étapes suivantes