更新时间:2023-02-03 GMT+08:00
分享

消息持久化

使用场景

默认情况下,RabbitMQ生产者生产的消息存储在内存中,当节点宕机或重启时,如何确保消息不丢失呢?RabbitMQ通过持久化机制实现,持久化包括Exchange持久化、Queue持久化和Message持久化。持久化是将内存中的消息写入到磁盘中,以防异常情况导致内存中的消息丢失。但是磁盘的读写速度远不如内存,开启消息持久化后,RabbitMQ的性能会下降。与惰性队列不同,持久化消息会在磁盘和内存中各存储一份,只有在内存空间不够时,才会将内存中的消息删除,存储到磁盘中。

  • 非持久化Queue、Exchange在重启之后会丢失。
  • 非持久化Message在重启之后会丢失(经过持久化Queue/Exchange的消息不会自动变为持久化消息)。
  • 持久化消息在尚未完成持久化时,如果服务器重启,消息会丢失。

设置Exchange持久化

RabbitMQ WebUI页面创建Exchange时,设置“durable”为“true”,如图1所示,设置成功后如图2所示。

图1 设置Exchange持久化
图2 持久化的Exchange

设置Queue持久化

RabbitMQ WebUI页面创建Queue时,设置“durable”为“true”,如图3所示,设置成功后如图4所示。

图3 设置Queue持久化
图4 持久化的Queue

设置Message持久化

Queue设置为持久化后,通过设置“MessageProperties”为“PERSISTENT_TEXT_PLAIN”来向Queue发送持久消息。

以下示例演示在Java客户端设置Message持久化

import com.rabbitmq.client.MessageProperties;
channel.basicPublish("", "my_queue",MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());

分享:

    相关文档

    相关产品