配置 RabbitMQ 持久化

最近更新时间:2025-08-26 14:59:12

我的收藏
RabbitMQ 默认将消息存储在内存中,一旦节点宕机或重启,这些消息就会丢失。
为了防止这种情况,RabbitMQ 提供了持久化功能,可以将消息保存到磁盘上,确保即使服务器出现问题,消息也不会丢失。持久化包括三个方面:Exchange 持久化、Queue 持久化和 Message 持久化。
开启消息持久化后,消息会同时存储在内存和磁盘上。只有当内存不足时,RabbitMQ 才会将部分消息从内存移除,仅保留在磁盘中。需要注意的是,持久化会降低 RabbitMQ 的性能,因为磁盘读写速度比内存慢得多。这与惰性队列不同,惰性队列是直接将消息写入磁盘,而不是同时在内存和磁盘中保存。

约束与限制

非持久化的 Queue、Exchange 在服务重启之后会丢失,需要重新创建。
未标记持久化的消息在服务中断后会消失,即使声明为持久化的消息,如果在写入磁盘过程中发生服务中断,仍可能丢失,只有成功持久化到磁盘的消息才能在重启后恢复。
仅开源托管版集群需要配置持久化,Serverless 版本集群默认开启持久化,无需配置。

配置 Exchange 持久化

在创建 Exchange 时,在参数配置中开启 Durable。具体步骤请参考创建 Exchange


配置 Queue 持久化

在创建 Queue 时,在基本信息中开启 Durable。具体步骤请参考创建 Queue


配置 Message 持久化

当 Queue 设置为持久化后,可以在客户端向 Queue 发送持久化消息。
以下为一个 Java 客户端示例,通过设置MessageProperties参数为PERSISTENT_TEXT_PLAIN来实现。
import com.rabbitmq.client.MessageProperties;
channel.basicPublish("", "test_queue",MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());