Es gibt zwei Möglichkeiten, die Nachrichtenverfallzeit (TTL) für RabbitMQ festzulegen:
- Über die Warteschlangeneigenschaften, wobei alle Nachrichten in der Warteschlange die gleiche Verfallzeit haben.
- 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),
})