Persistence Configuration

默认情况下,exchange、queue、message 等数据都是存储在内存中的,这意味着如果 RabbitMQ 重启、关闭、宕机时所有的信息都将丢失。

RabbitMQ 提供了持久化来解决这个问题,持久化后,如果 RabbitMQ 发送 重启、关闭、宕机,下次起到时 RabbitMQ 会从硬盘中恢复 exchange、queue、message 等数据。

RabbitMQ 持久化


持久化类型

RabbitMQ 持久化包含3个部分:

queue 的持久化能保证本身的元数据不会因异常而丢失,但是不能保证内部的 message 不会丢失。要确保 message 不丢失,还需要将 message 也持久化。

如果 exchange 和 queue 都是持久化的,那么它们之间的 binding 也是持久化的。

如果 exchange 和 queue 两者之间有一个持久化,一个非持久化,就不允许建立绑定。

<aside> 💡 一旦确定了 exchange 和 queue 的 durable,就不能修改了。如果非要修改,唯一的办法就是删除原来的 exchange 或 queue 后,重现创建

</aside>

持久化对性能的影响

如果将所有的消息都进行持久化操作,这样会严重影响 RabbitMQ 的性能。写入磁盘的速度可比写入内存的速度要慢很多。所以需要在可靠性和吞吐量之间做权衡。