RabbitMQ持久化机制分为队列持久化、消息持久化、交换器持久化。不管是持久化的消息还是非持久化的消息都可以被写入到磁盘。
持久化消息会同时写入磁盘和内存(加快读取速度),非持久化消息会在内存不够用时,将消息写入磁盘(Rabbitmq重启之后就没有了)。
Rabbitmq队列持久化
声明队列的时候可以设置队列是否需要持久化
Golang的队列声明方式
q, err := ch.QueueDeclare(
"hello", // 队列名字
true, // 队列是否持久化
false,
false,
false,
nil,
)
提示:其他开发语言类似,在声明队列的时候可以设置。
Rabbitmq交换机持久化
声明交换机的时候可以通过属性设置是否需要持久化
golang语言声明方式:
err = ch.ExchangeDeclare(
"tizi365", // 交换机名字
"fanout", // 交换机类型
true, // 是否持久化
false,
false,
false,
nil,
)
提示:其他开发语言类似,在声明交换机的时候可以设置。
Rabbitmq消息持久化
在发布消息的时候,通过消息属性可以设置,消息是否需要持久化。
提示:队列持久化,不代表消息就是持久化的。
golang语言消息发布方式:
err = ch.Publish(
"tizi365", // 交换机
"", // 路由参数
false,
false,
amqp.Publishing{
DeliveryMode:2, // 消息投递模式,1代表非持久化,2代表持久化,
ContentType: "text/plain",
Body: []byte(body),
})