Há duas maneiras de definir o tempo de expiração da mensagem (TTL) para o RabbitMQ:
- Definir através das propriedades da fila, onde todas as mensagens na fila têm o mesmo tempo de expiração.
- Definir o tempo de expiração para cada mensagem individualmente, permitindo diferentes TTL para cada mensagem. Se ambos os métodos forem usados juntos, o TTL da mensagem será o menor valor entre os dois.
Dica: Para o primeiro método de definir propriedades da fila, uma vez que a mensagem expira, ela será removida da fila. No segundo método, mesmo que a mensagem expire, ela não será excluída imediatamente da fila porque a expiração de cada mensagem é verificada antes da entrega aos consumidores.
Abaixo está uma demonstração de como fazer isso usando Golang, similar a outras linguagens de programação.
Definir TTL da Fila
Defina o tempo de expiração da mensagem através das propriedades da fila (x-message-ttl).
// Propriedades da fila
props := make(map[string]interface{})
// Tempo de expiração da mensagem é de 60 segundos
props["x-message-ttl"] = 60000
q, err := ch.QueueDeclare(
"tizi365.ttl.hello", // Nome da fila
true, // Se persistir a fila
false,
false,
false,
props, // Definir propriedades da fila
)
Definir TTL da Mensagem
Defina o tempo de expiração da mensagem através das propriedades da mensagem
err = ch.Publish(
"tizi365", // Nome da troca
"", // Chave de roteamento
false,
false,
amqp.Publishing{
Expiration: "30000", // Tempo de expiração é de 30 segundos
ContentType: "text/plain",
Body: []byte(body),
})