rabbitmq怎样保证消息的可靠性(消息不丢失)

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

交换器持久化

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

队列持久化

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

消息持久化

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

设置了队列和消息的持久化,当 RabbitMQ 服务重启之后,消息依旧存在。单单只设置队列持久化,重启之后消息会丢失;单单只设置消息的持久化,重启之后队列消失,继而消息也丢失,所以单单设置消息持久化而不设置队列的持久化也是没有意义的。
 

你可能感兴趣的:(java-rabbitmq,rabbitmq,分布式)