功能概述

为了数据安全考虑,将数据存入磁盘,我们称之为持久化。RabbitMQ 作为传统消息队列,在消息未持久化的情况下,若用户重启或者关闭消息所在节点,会造成消息丢失;如果设置了持久化的策略,但未设置 HA 镜像队列模式,删除消息所在的单节点也会造成数据丢失。

当有非常重要的队列消息需要存储时,或用户不能承受丢失任何消息的代价,企业云平台建议用户将队列声明为 持久,且消息传递模式以 持久 模式进行发送。

注意事项

  • 持久性的消息需要占用更多的资源。即使用户发送的是临时消息,懒惰的队列也会对性能产生相同的影响。因此,对于高性能,企业云平台建议使用瞬态消息。

  • 写消息时尽量不要重启节点,例如:新增减少磁盘节点、修改参数、扩容伸缩集群都会导致集群的重启。

操作步骤

消息队列持久化包括 3 个部分。分别说明如下。

  • exchange 持久化

    在声明时指定 durable ⇒1

  • queue 持久化

    在声明时指定 durable ⇒1

  • 消息持久化

    在投递时指定 delivery_mode ⇒2

消息如需持久化,请务必保证 queueexchange 均是持久化的,并在投递消息的时候设置 delivery_mode = 2