Todos los productos
Search
Centro de documentos

ApsaraMQ for RabbitMQ:Dead-letter exchanges

Última actualización: Oct 09, 2026

En ocasiones los mensajes fallan: un consumidor los rechaza, se agotan los reintentos o expira el tiempo de vida (TTL). En lugar de perderlos, un exchange de dead-letter (DLX) los captura y los enruta a una cola dedicada para su inspección, reprocesamiento o generación de alertas.

A continuación se describen los conceptos clave, el proceso de enrutamiento, los métodos de configuración y los encabezados de los mensajes de dead-letter en ApsaraMQ for RabbitMQ.

Conceptos clave

Término

Definición

Exchange de dead-letter

Exchange que recibe mensajes de dead-letter y los enruta a una cola de dead-letter según las claves de enlace, las claves de enrutamiento y los atributos de los encabezados. Cualquier tipo de exchange estándar (direct, fanout, topic o headers) puede funcionar como exchange de dead-letter.

Clave de enrutamiento de dead-letter

Clave de enrutamiento que se utiliza para enrutar un mensaje de dead-letter. Si no se especifica, el mensaje conserva su clave de enrutamiento original.

Mensaje de dead-letter

Mensaje reenviado a un exchange de dead-letter. Consulte Cuándo un mensaje se convierte en dead-letter para ver la lista completa de eventos que lo desencadenan.

Cola de dead-letter

Cola vinculada a un exchange de dead-letter que almacena los mensajes de dead-letter.

Cuándo un mensaje se convierte en dead-letter

Un mensaje se envía al exchange de dead-letter cuando ocurre cualquiera de los siguientes eventos:

  • Acuse de recibo negativo: un consumidor llama a basic.reject o basic.nack con requeue establecido en false.

  • Agotamiento de reintentos: el mensaje no se consume después de 16 intentos de reintento. Para más detalles, consulte Consumption retry policies.

  • Vencimiento del TTL: el mensaje permanece en la cola más tiempo del que indica su TTL configurado. Para más detalles, consulte Message TTL.

Cómo funciona

  1. Un productor publica un mensaje en un exchange.

  2. El exchange enruta el mensaje a una cola.

  3. Un consumidor extrae el mensaje de la cola.

  4. El mensaje se convierte en dead-letter por un acuse de recibo negativo, tras 16 intentos de reintento con errores o cuando vence su TTL.

  5. La cola reenvía el mensaje de dead-letter al exchange que especifica x-dead-letter-exchange, mediante la clave de enrutamiento que define x-dead-letter-routing-key.

  6. El exchange de dead-letter enruta el mensaje a la cola de dead-letter vinculada.

Dead-letter message routing flow

Notas de uso

  • Requisito de mismo vhost: el exchange de dead-letter y su cola vinculada deben residir en el mismo vhost. No es compatible el enrutamiento de dead-letter entre distintos vhosts.

  • Enlace inmutable del DLX: una vez que se crea una cola con un exchange de dead-letter, no se puede modificar la configuración del DLX. Elimine la cola y cree una nueva con la configuración actualizada.

  • Sin DLX configurado: si una cola no tiene configurado un exchange de dead-letter, los mensajes se eliminan de forma permanente cuando se supera el número máximo de intentos de entrega (16 de manera predeterminada). Si hay un exchange de dead-letter configurado, los mensajes se enrutan a la cola de dead-letter correspondiente.

Configurar un exchange de dead-letter

Configure un exchange de dead-letter desde la consola de ApsaraMQ for RabbitMQ, la API CreateQueue o un SDK de cliente.

Consola

Configure un exchange de dead-letter al crear una cola en la consola.

  1. Inicie sesión en la consola de ApsaraMQ for RabbitMQ.

  2. En la página Overview, dentro de la sección Resource Distribution, seleccione una región.

  3. En la página Instances, haga clic en el nombre de la instancia de destino.

  4. En el panel de navegación izquierdo, haga clic en Queues.

  5. En la página Queues, seleccione un vhost en la lista desplegable Change junto a vhost y luego haga clic en Create Queue.

  6. En el panel Create Queue, establezca los siguientes parámetros y haga clic en OK.

Parámetro

Descripción

Queue Name

Nombre de la cola. Admite letras, dígitos, guiones (-), guiones bajos (_), puntos (.), signos de número (#), barras diagonales (/) y signos de arroba (@). Longitud: de 1 a 255 caracteres. No se puede modificar después de la creación. El prefijo amq. está reservado y no se puede utilizar.

Auto Delete

Indica si se elimina automáticamente la cola después de que el último consumidor cancela la suscripción. Valores válidos: true, false.

Advanced Settings

Haga clic para expandir. Configure el exchange de dead-letter y los ajustes relacionados:

- DeadLetterExchange

Exchange que recibe los mensajes de dead-letter de esta cola.

- DeadLetterRoutingKey

Clave de enrutamiento para los mensajes de dead-letter. El exchange de dead-letter usa esta clave para enrutar los mensajes a la cola de dead-letter correspondiente.

- MessageTTL

TTL del mensaje en milisegundos. Los mensajes que no se consumen dentro de este periodo se convierten en mensajes de dead-letter y se reenvían al exchange de dead-letter. Para más detalles, consulte Message TTL.

API

Llame a la operación CreateQueue con los parámetros del exchange de dead-letter. Para más detalles, consulte CreateQueue.

SDK de cliente

Especifique x-dead-letter-exchange y x-dead-letter-routing-key en los argumentos de la cola al declararla.

El siguiente ejemplo en Java declara un exchange de tipo direct llamado some.exchange.name como exchange de dead-letter, con demo-routing-key como clave de enrutamiento de dead-letter:

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);

Encabezados de los mensajes de dead-letter

Cuando un mensaje se convierte en dead-letter, ApsaraMQ for RabbitMQ agrega encabezados de metadatos para registrar el historial del evento.

Resumen de encabezados

Encabezado

Descripción

x-first-death-exchange

Exchange donde se encontraba el mensaje cuando se convirtió en dead-letter por primera vez.

x-first-death-queue

Cola donde se encontraba el mensaje cuando se convirtió en dead-letter por primera vez.

x-first-death-reason

Motivo por el cual el mensaje se convirtió en dead-letter por primera vez.

x-death-total

Número total de veces que el mensaje se ha convertido en dead-letter.

El arreglo x-death

El encabezado x-death es un arreglo de entradas. Cada entrada registra un evento de dead-letter con los siguientes campos:

Campo

Descripción

reason

Motivo por el cual el mensaje se convirtió en dead-letter.

queue

Cola donde se encontraba el mensaje cuando se convirtió en dead-letter.

exchange

Exchange donde se publicó el mensaje antes de convertirse en dead-letter.

routing-keys

Claves de enrutamiento del mensaje en el momento en que se convirtió en dead-letter.

count

Número de veces que el mensaje se convirtió en dead-letter desde esta cola por este motivo.

time

Momento en que el mensaje se convirtió en dead-letter.

Valores de motivo de dead-letter

Valor

Evento desencadenante

expired

Venció el TTL del mensaje.

nack

El mensaje recibió un acuse de recibo negativo con requeue establecido en false.

reject

El mensaje se rechazó con requeue establecido en false.

Consumption limit exceeded

El mensaje falló después de 16 intentos de reintento.

Habilitar el TTL para las colas de dead-letter

De manera predeterminada, los mensajes de una cola de dead-letter no caducan, incluso si la cola tiene un TTL configurado. Habilite la función de TTL a nivel de instancia para permitir que los mensajes de dead-letter respeten la configuración de TTL de la cola. Cuando vence el TTL de un mensaje de dead-letter, este se reenvía al siguiente exchange de dead-letter configurado.

Tipos de instancia compatibles

La función de TTL para las colas de dead-letter está disponible en los siguientes tipos de instancia:

  • Serverless

  • Enterprise Edition (Subscription)

  • Platinum Edition (Subscription)

Procedimiento

  1. En la página Instances de la consola de ApsaraMQ for RabbitMQ, haga clic en el nombre de la instancia de destino.

  2. En la página Instance Details, haga clic en la pestaña Limits.

  3. Haga clic en Activate junto a TTL Feature Supported.

Importante
  • Evite crear bucles de enrutamiento de dead-letter. Por ejemplo, si la cola de dead-letter de la cola A es la cola B, y la de la cola B es la cola A, los mensajes circularán de forma indefinida. Si ApsaraMQ for RabbitMQ detecta un bucle de este tipo sin eventos de rechazo, deshabilita automáticamente el TTL de los mensajes afectados para detenerlo.

  • Un mensaje de dead-letter se puede enrutar entre colas un máximo de 16 veces. Al alcanzar este límite, se deshabilita el TTL de los mensajes afectados.

Pasos siguientes

  • Manage exchanges: elimine un exchange de dead-letter o vincule una cola de dead-letter a un exchange de dead-letter.

  • Message TTL: establezca tiempos de vencimiento en los mensajes.

  • Consumption retry policies: configure el comportamiento de reintento antes de que los mensajes se conviertan en dead-letter.