O mecanismo de persistência do RabbitMQ inclui persistência de filas, persistência de mensagens e persistência de trocas. Independentemente de a mensagem ser persistente ou não, ela pode ser gravada no disco.
As mensagens persistentes são escritas tanto no disco quanto na memória (para acelerar a leitura), enquanto as mensagens não persistentes são gravadas no disco quando a memória é insuficiente (serão perdidas após o reinício do RabbitMQ).
Persistência de Filas do RabbitMQ
Ao declarar uma fila, é possível definir se a fila precisa ser persistente. Em Golang, a fila é declarada da seguinte forma:
q, err := ch.QueueDeclare(
"hello", // nome da fila
true, // se a fila deve ser persistente
false,
false,
false,
nil,
)
Dica: Semelhante a outras linguagens de programação, a fila pode ser configurada durante a sua declaração.
Persistência de Trocas do RabbitMQ
Ao declarar uma troca, é possível definir se ela precisa ser persistente usando propriedades. Em Golang, é declarada da seguinte forma:
err = ch.ExchangeDeclare(
"tizi365", // nome da troca
"fanout", // tipo de troca
true, // se deve ser persistente
false,
false,
false,
nil,
)
Dica: Semelhante a outras linguagens de programação, a persistência pode ser configurada durante a declaração da troca.
Persistência de Mensagens do RabbitMQ
Ao publicar uma mensagem, é possível definir se a mensagem precisa ser persistente por meio das propriedades da mensagem.
Dica: A persistência da fila não significa que a mensagem é automaticamente persistente.
Em Golang, as mensagens são publicadas da seguinte forma:
err = ch.Publish(
"tizi365", // troca
"", // chave de roteamento
false,
false,
amqp.Publishing{
DeliveryMode:2, // modo de entrega da mensagem, 1 para não persistente, 2 para persistente
ContentType: "text/plain",
Body: []byte(body),
})