Il existe deux façons de définir le temps d'expiration du message (TTL) pour RabbitMQ :
- Définir à travers les propriétés de la file d'attente, où tous les messages dans la file d'attente ont le même temps d'expiration.
- Définir le temps d'expiration pour chaque message individuellement, permettant un TTL différent pour chaque message. Si les deux méthodes sont utilisées ensemble, le TTL du message sera la plus petite valeur entre les deux.
Astuce : Pour la première méthode de définition des propriétés de la file d'attente, une fois que le message expire, il sera supprimé de la file d'attente. Dans la deuxième méthode, même si le message expire, il ne sera pas immédiatement supprimé de la file d'attente car l'expiration de chaque message est vérifiée avant la livraison aux consommateurs.
Voici une démonstration de comment faire cela en utilisant Golang, similaire à d'autres langages de programmation.
Définir le TTL de la file d'attente
Définir le temps d'expiration du message à travers les propriétés de la file d'attente (x-message-ttl).
// Propriétés de la file d'attente
props := make(map[string]interface{})
// Le temps d'expiration du message est de 60 secondes
props["x-message-ttl"] = 60000
q, err := ch.QueueDeclare(
"tizi365.ttl.hello", // Nom de la file d'attente
true, // Si la file d'attente doit être persistante
false,
false,
false,
props, // Définir les propriétés de la file d'attente
)
Définir le TTL du message
Définir le temps d'expiration du message à travers les propriétés du message
err = ch.Publish(
"tizi365", // Nom de l'échange
"", // Clé de routage
false,
false,
amqp.Publishing{
Expiration: "30000", // Le temps d'expiration est de 30 secondes
ContentType: "text/plain",
Body: []byte(body),
})