消息持久化
更新时间:2025-08-15 03:41:38
功能概述
为了数据安全考虑,将数据存入磁盘,我们称之为持久化。RabbitMQ 作为传统消息队列,在消息未持久化的情况下,若用户重启或者关闭消息所在节点,会造成消息丢失;如果设置了持久化的策略,但未设置 HA 镜像队列模式,删除消息所在的单节点也会造成数据丢失。
当有非常重要的队列消息需要存储时,或用户不能承受丢失任何消息的代价,企业云平台建议用户将队列声明为 持久,且消息传递模式以 持久 模式进行发送。
注意事项
-
持久性的消息需要占用更多的资源。即使用户发送的是临时消息,懒惰的队列也会对性能产生相同的影响。因此,对于高性能,企业云平台建议使用瞬态消息。
-
写消息时尽量不要重启节点,例如:新增减少磁盘节点、修改参数、扩容伸缩集群都会导致集群的重启。
操作步骤
消息队列持久化包括 3 个部分。分别说明如下。
-
exchange 持久化
在声明时指定
durable ⇒1 -
queue 持久化
在声明时指定
durable ⇒1 -
消息持久化
在投递时指定
delivery_mode ⇒2
消息如需持久化,请务必保证 queue 与 exchange 均是持久化的,并在投递消息的时候设置 delivery_mode = 2。