RabbitMQ 持久化

RabbitMQ的持久化分为:交换器的持久化。队列的持久化和消息的持久化。

交换器的持久化

通过在声明队列是将durable参数配置为true实现的。如果交换器不设置持久化,那么RabbitMQ服务重启之后,相关的交换器元数据会丢失,不过消息不会丢失,只是不能将消息发送到这个交换器中了。对于一个长期使用的交换器来说,建议将其置为持久化。

队列的持久化

通过在声明队列时将durable参数置为true实现的,如果队列不设置持久化,那么在RabbitMQ服务重启之后,相关队列的元数据会丢失,此时数据也会丢失。

队列的持久化能够保证其本身的元数据不会因为异常情况而丢失,但是并不能保证内部所存储的消息不会丢失。要确保消息不会丢失,需要将其设置为持久化。

消息的持久化

可以将所有的消息置为持久化,但是这样会严重影响RabbitMQ的性能。写入次磁盘的速度比写入内存的熟读慢的不只是一点点。对于可靠性不是那么高的消息可以不采用持久化处理,来提高整体的吞吐量。在选择是否要将消息持久化时,需要在可靠性和吞吐量之间做一个权衡。

在持久化的消息正确存入RabbitMQ之后,还需要有一段时间才能存入磁盘之中,RabbitMQ并不会为每条消息都进行同步存盘的处理。可能仅仅保存到操作系统缓存之中而不是物理磁盘之中。如果在这段时间内RabbitMQ服务节点发生了宕机、重启等异常情况,消息保存还没来得及落盘,那么这些消息将会丢失。
为了解决上述问题,引入了RabbitMQ镜像队列机制,相当于配置了副本,如果主节点在此特殊时间内挂掉,可以自动切换到从节点,有效保证了高可用。

你可能感兴趣的:(RabbitMQ,rabbitmq,队列)