一架梯子,一头程序猿,仰望星空!
RabbitMQ教程 > 内容正文

RabbitMQ 消息持久化机制(消息不丢)


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

推荐教程