Il existe deux façons de définir le temps d'expiration du message (TTL) pour RabbitMQ :

  1. 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.
  2. 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),
		})