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),
			})