Todos os produtos
Search
Central de documentação

ApsaraMQ for RabbitMQ:Message TTL

Última atualização: Jun 28, 2026

O tempo de vida (TTL) da mensagem determina quanto tempo ela permanece em uma fila antes que o ApsaraMQ for RabbitMQ a descarte. Use o TTL de mensagem para limpar automaticamente mensagens não consumidas e evitar acúmulo nas filas.

Como funciona

Quando uma mensagem permanece em uma fila além do TTL configurado, o ApsaraMQ for RabbitMQ a remove. O comportamento subsequente depende da configuração de um dead-letter exchange:

  • Sem dead-letter exchange configurado: O sistema descarta a mensagem permanentemente. Não é possível entregá-la aos consumidores nem recuperá-la por meio de basic.get.

  • Com dead-letter exchange configurado: O sistema roteia a mensagem para o dead-letter exchange, que a encaminha à dead-letter queue associada. Recupere as mensagens expiradas dessa fila para inspeção ou reprocessamento. Para mais detalhes, consulte Dead-letter exchanges.

Casos de uso

O TTL de mensagem evita o acúmulo de mensagens durante picos de tráfego. Se não for necessário armazenar mensagens expiradas, defina um TTL para descartá-las automaticamente em vez de permitir que se acumulem na fila.

Conceitos principais

TTL por fila vs. TTL por mensagem

O ApsaraMQ for RabbitMQ oferece suporte a dois níveis de TTL:

Nível

Escopo

Argumento

Tipo de valor

Por fila

Aplica-se a todas as mensagens da fila

x-message-ttl

Inteiro não negativo (milissegundos)

Por mensagem

Aplica-se a uma única mensagem publicada

expiration

String que representa um inteiro não negativo (milissegundos)

Se ambos forem definidos, o menor valor prevalece.

O ApsaraMQ for RabbitMQ não permite definir o TTL de mensagem por meio do parâmetro policy da ferramenta rabbitmqctl . Em vez disso, use o argumento de fila x-message-ttl ou a propriedade de mensagem expiration .

TTL com mensagens atrasadas

Para mensagens atrasadas, o TTL efetivo é calculado da seguinte forma:

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

Para mais informações, consulte Mensagens atrasadas.

Valor máximo de TTL

O valor máximo de TTL corresponde ao intervalo agendado para envio de mensagens programadas na instância.

TTL definido como zero

Definir o TTL como 0 faz com que o sistema descarte as mensagens ou as encaminhe ao dead-letter exchange, a menos que um consumidor as receba imediatamente.

Defina o TTL da mensagem

Defina o TTL por fila no console

Especifique o TTL da mensagem ao criar uma fila no console do ApsaraMQ for RabbitMQ. Para mais detalhes, consulte Gerencie filas.

Defina o TTL por fila via API

Chame a operação CreateQueue no OpenAPI Explorer para crie uma fila com o TTL de mensagem configurado.

Defina o TTL com um SDK open source do RabbitMQ

Use qualquer SDK compatível para definir o TTL no nível da fila ou da mensagem.

Os exemplos Java a seguir demonstram como definir x-message-ttl durante a declaração da fila e expiration em mensagens individuais.

TTL por fila (aplica-se a todas as mensagens da fila):

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 mensagem (aplica-se a uma única mensagem publicada):

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);
Quando o TTL por fila e o TTL por mensagem são definidos simultaneamente, o menor valor prevalece.

Substitua o nome do exchange, a chave de roteamento e os valores de TTL pela sua configuração real.

Próximos passos