Rabbitmq持久化

       持久化可以提高Rabbitmq的可靠性,以防止在异常情况(重启、关闭、宕机等)下的数据丢失。Rabbitmq的持久化分为三个部分:交换机的持久化、队列的持久化和消息的持久化。

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

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

       队列的持久化能保证其本身的元数据不会因异常情况而丢失,但是并不能保证内部所存储的消息不会丢失。要确保消息不会丢失,需要将其设置为持久化。通过将消息的投递模式设置为2即可实现消息的持久化。

        设置了队列和消息的持久化,当Rabbitmq服务重启之后,消息依旧存在。单单只设置队列的持久化,重启之后消息会丢失;单单只设置消息的持久化,重启之后队列消失,继而消息也丢失。

注意要点:

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

你可能感兴趣的:(Rabbitmq,持久化,rabbitmq)