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 |
|
Entero no negativo (milisegundos) |
|
Por mensaje |
Se aplica a un único mensaje publicado |
|
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ámetropolicyde la herramientarabbitmqctl. En su lugar, use el argumento de colax-message-ttlo la propiedad de mensajeexpiration.
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
Dead-letter exchanges -- Gestione los mensajes caducados en lugar de descartarlos
Delayed messages -- Programe mensajes para su entrega futura
Supported SDKs -- Consulte ejemplos de SDK en otros lenguajes