RabbitMQ's Persistenzmechanismus umfasst die Persistenz von Warteschlangen, Nachrichten und Exchanges. Unabhängig davon, ob die Nachricht persistent ist oder nicht, kann sie auf die Festplatte geschrieben werden.
Persistente Nachrichten werden sowohl auf die Festplatte als auch in den Speicher geschrieben (um das Lesen zu beschleunigen), während nicht-persistente Nachrichten auf die Festplatte geschrieben werden, wenn der Speicherplatz knapp wird (sie gehen nach dem Neustart von RabbitMQ verloren).
RabbitMQ Queue Persistenz
Beim Deklarieren einer Warteschlange kann festgelegt werden, ob die Warteschlange persistiert werden soll. In Golang erfolgt die Deklaration der Warteschlange wie folgt:
q, err := ch.QueueDeclare(
"hello", // Warteschlangenname
true, // ob die Warteschlange persistiert werden soll
false,
false,
false,
nil,
)
Tipp: Ähnlich wie in anderen Programmiersprachen kann die Persistenz beim Deklarieren der Warteschlange festgelegt werden.
RabbitMQ Exchange Persistenz
Beim Deklarieren eines Exchanges kann über Eigenschaften festgelegt werden, ob er persistiert werden soll. In Golang wird dies wie folgt deklariert:
err = ch.ExchangeDeclare(
"tizi365", // Exchangename
"fanout", // Exchange-Typ
true, // ob er persistiert werden soll
false,
false,
false,
nil,
)
Tipp: Ähnlich wie in anderen Programmiersprachen kann die Persistenz beim Deklarieren des Exchanges festgelegt werden.
RabbitMQ Message Persistenz
Beim Veröffentlichen einer Nachricht können über Nachrichteneigenschaften festgelegt werden, ob die Nachricht persistent sein soll.
Tipp: Warteschlangenpersistenz bedeutet nicht automatisch, dass die Nachricht persistent ist.
In Golang werden Nachrichten wie folgt veröffentlicht:
err = ch.Publish(
"tizi365", // Exchange
"", // Routing-Key
false,
false,
amqp.Publishing{
DeliveryMode:2, // Nachrichtenzustellung, 1 für nicht-persistent, 2 für persistent
ContentType: "text/plain",
Body: []byte(body),
})