Le mécanisme de persistance de RabbitMQ inclut la persistance de file d'attente, de message et d'échange. Que le message soit persistant ou non, il peut être écrit sur le disque.
Les messages persistants sont écrits à la fois sur le disque et en mémoire (pour accélérer la lecture), tandis que les messages non persistants sont écrits sur le disque lorsque la mémoire est insuffisante (ils seront perdus après le redémarrage de RabbitMQ).
Persistance de la file d'attente RabbitMQ
Lors de la déclaration d'une file d'attente, vous pouvez définir si la file d'attente doit être persistante. En Golang, la file d'attente est déclarée comme suit :
q, err := ch.QueueDeclare(
"hello", // nom de la file d'attente
true, // indique si la file d'attente doit être persistante
false,
false,
false,
nil,
)
Astuce : Tout comme dans d'autres langages de programmation, la file d'attente peut être définie lors de sa déclaration.
Persistance de l'échange RabbitMQ
Lors de la déclaration d'un échange, vous pouvez définir s'il doit être persistant en utilisant des propriétés. En Golang, il est déclaré comme suit :
err = ch.ExchangeDeclare(
"tizi365", // nom de l'échange
"fanout", // type d'échange
true, // indique s'il doit être persistant
false,
false,
false,
nil,
)
Astuce : Tout comme dans d'autres langages de programmation, la persistance peut être définie lors de la déclaration de l'échange.
Persistance du message RabbitMQ
Lors de la publication d'un message, vous pouvez définir si le message doit être persistant via les propriétés du message.
Astuce : La persistance de la file d'attente ne signifie pas que le message est automatiquement persistant.
En Golang, les messages sont publiés comme suit :
err = ch.Publish(
"tizi365", // échange
"", // clé de routage
false,
false,
amqp.Publishing{
DeliveryMode:2, // mode de livraison du message, 1 pour non persistant, 2 pour persistant
ContentType: "text/plain",
Body: []byte(body),
})