Es gibt zwei Möglichkeiten, die Nachrichtenverfallzeit (TTL) für RabbitMQ festzulegen:

  1. Über die Warteschlangeneigenschaften, wobei alle Nachrichten in der Warteschlange die gleiche Verfallzeit haben.
  2. Die Verfallzeit für jede Nachricht einzeln festlegen, um unterschiedliche TTL für jede Nachricht zu ermöglichen. Wenn beide Methoden zusammen verwendet werden, ist die TTL der Nachricht der kleinere Wert zwischen den beiden.

Tipp: Bei der ersten Methode zur Festlegung von Warteschlangeneigenschaften wird die Nachricht nach Ablauf entfernt. Bei der zweiten Methode wird die Nachricht selbst dann, wenn sie abläuft, nicht sofort aus der Warteschlange gelöscht, da das Ablaufdatum jeder Nachricht vor der Zustellung an die Verbraucher überprüft wird.

Im Folgenden ist eine Demonstration, wie man dies in Golang einstellt, ähnlich zu anderen Programmiersprachen.

Warteschlangen-TTL festlegen

Die Verfallzeit der Nachricht über Warteschlangeneigenschaften (x-message-ttl) festlegen.

	// Warteschlangeneigenschaften
	props := make(map[string]interface{})
	// Verfallzeit der Nachricht beträgt 60 Sekunden
	props["x-message-ttl"] = 60000

	q, err := ch.QueueDeclare(
		"tizi365.ttl.hello", // Warteschlangenname
		true,   // Ob die Warteschlange persistiert werden soll
		false,
		false,
		false,
		props, // Warteschlangeneigenschaften festlegen
	)

Nachrichten-TTL festlegen

Die Verfallzeit der Nachricht über Eigenschaften der Nachricht festlegen

err = ch.Publish(
		"tizi365",     // Austauschname
		"", // Routing-Schlüssel
		false,
		false,
		amqp.Publishing{
			Expiration: "30000", // Verfallzeit beträgt 30 Sekunden
			ContentType: "text/plain",
			Body:        []byte(body),
		})