Todos los productos
Search
Centro de documentos

ApsaraMQ for RabbitMQ:TTL de mensajes

Última actualización: Sep 05, 2026

El tiempo de vida (TTL) de un mensaje controla cuánto tiempo permanece este en una cola antes de que ApsaraMQ for RabbitMQ lo descarte. Use el TTL de mensajes para limpiar automáticamente los mensajes no consumidos y evitar la acumulación en las colas.

Funcionamiento

Cuando un mensaje permanece en una cola más tiempo del TTL configurado, ApsaraMQ for RabbitMQ lo elimina. Lo que sucede a continuación depende de si se configuró un dead-letter exchange:

  • Sin dead-letter exchange configurado: El mensaje se descarta permanentemente. No se puede entregar a los consumidores ni recuperar mediante basic.get.

  • Con dead-letter exchange configurado: El mensaje se enruta al dead-letter exchange, que lo reenvía a la dead-letter queue vinculada. Recupere los mensajes caducados de la dead-letter queue para inspeccionarlos o reprocesarlos. Para obtener más detalles, consulte Dead-letter exchanges.

Casos de uso

El TTL de mensajes evita su acumulación durante los picos de tráfico. Si no es necesario almacenar los mensajes caducados, establezca un TTL para descartarlos automáticamente en lugar de permitir que se acumulen en la cola.

Conceptos clave

TTL por cola frente a TTL por mensaje

ApsaraMQ for RabbitMQ admite dos niveles de TTL:

Nivel

Alcance

Argumento

Tipo de valor

Por cola

Se aplica a todos los mensajes de la cola

x-message-ttl

Entero no negativo (milisegundos)

Por mensaje

Se aplica a un único mensaje publicado

expiration

Cadena que representa un entero no negativo (milisegundos)

Si ambos están configurados, prevalece el valor menor.

ApsaraMQ for RabbitMQ no admite configurar el TTL de mensajes mediante el parámetro policy de la herramienta rabbitmqctl . En su lugar, use el argumento de cola x-message-ttl o la propiedad de mensaje expiration .

TTL con mensajes diferidos

Para los mensajes diferidos, el TTL real se calcula de la siguiente manera:

Actual TTL = min(per-message TTL, per-queue TTL) + delay time

Para obtener más información, consulte Delayed messages.

Valor máximo de TTL

El valor máximo de TTL equivale al intervalo programado para enviar mensajes programados en la instancia.

TTL establecido en cero

Establecer el TTL en 0 provoca que los mensajes se descarten o se reenvíen al dead-letter exchange, a menos que un consumidor los reciba inmediatamente.

Configurar el TTL de mensajes

Establecer el TTL por cola en la consola

Especifique el TTL de mensajes al crear una cola en la consola de ApsaraMQ for RabbitMQ. Para obtener más detalles, consulte Manage queues.

Establecer el TTL por cola mediante la API

Invoque la operación CreateQueue en OpenAPI Explorer para crear una cola con el TTL de mensajes configurado.

Establecer el TTL con un SDK de RabbitMQ de código abierto

Use cualquier supported SDK para configurar el TTL en la cola o en el mensaje.

Los siguientes ejemplos en Java muestran cómo establecer x-message-ttl durante la declaración de la cola y expiration en mensajes individuales.

TTL por cola (se aplica a todos los mensajes de la cola):

Map<String, Object> args = new HashMap<String, Object>();
// Set TTL to 1000 milliseconds (1 second) for all messages in this queue
args.put("x-message-ttl", 1000);
channel.queueDeclare("myqueue", false, false, false, args);

TTL por mensaje (se aplica a un único mensaje publicado):

byte[] messageBodyBytes = "test".getBytes();
AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
        // Set TTL to 1000 milliseconds (1 second) for this message only
        .expiration("1000")
        .build();
channel.basicPublish("my-exchange", "my-routing-key", properties, messageBodyBytes);
Si configura tanto el TTL por cola como el TTL por mensaje, prevalece el valor menor.

Reemplace el nombre del exchange, la routing key y los valores de TTL con su configuración real.

Pasos siguientes