Mechanizm trwałości RabbitMQ obejmuje trwałość kolejki, trwałość wiadomości i trwałość wymiany. Bez względu na to, czy wiadomość jest trwała czy nie, może zostać zapisana na dysku.
Trwałe wiadomości są zapisywane zarówno na dysku, jak i w pamięci (dla przyspieszenia odczytu), podczas gdy wiadomości nietrwałe są zapisywane na dysku, gdy pamięć jest niewystarczająca (zostaną utracone po ponownym uruchomieniu RabbitMQ).
Trwałość kolejki RabbitMQ
Podczas deklarowania kolejki można ustawić, czy kolejka musi być trwała. W Golangu kolejka jest deklarowana w następujący sposób:
q, err := ch.QueueDeclare(
"hello", // nazwa kolejki
true, // czy kolejka powinna być trwała
false,
false,
false,
nil,
)
Wskazówka: Podobnie jak w innych językach programowania, trwałość można ustawić podczas deklarowania kolejki.
Trwałość wymiany RabbitMQ
Podczas deklarowania wymiany można ustawić, czy wymiana ma być trwała przy użyciu właściwości. W Golangu jest deklarowana w następujący sposób:
err = ch.ExchangeDeclare(
"tizi365", // nazwa wymiany
"fanout", // typ wymiany
true, // czy powinna być trwała
false,
false,
false,
nil,
)
Wskazówka: Podobnie jak w innych językach programowania, trwałość można ustawić podczas deklarowania wymiany.
Trwałość wiadomości RabbitMQ
Podczas wysyłania wiadomości można ustawić, czy wiadomość musi być trwała za pomocą właściwości wiadomości.
Wskazówka: Trwałość kolejki nie oznacza automatycznej trwałości wiadomości.
W Golangu wiadomości są wysyłane w następujący sposób:
err = ch.Publish(
"tizi365", // wymiana
"", // klucz routingu
false,
false,
amqp.Publishing{
DeliveryMode:2, // tryb dostarczania wiadomości, 1 dla nietrwałej, 2 dla trwałej
ContentType: "text/plain",
Body: []byte(body),
})