一架梯子,一头程序猿,仰望星空!
RabbitMQ面试题 > 内容正文

RabbitMQ面试题:如何确保消息不丢失?


RabbitMq如何确保消息不丢失?

RabbitMQ主要通过持久化机制,确保消息不丢,RabbitMQ持久化机制分为队列持久化、消息持久化、交换器持久化。

下面从多个方面确保消息不丢:

消息持久化

RabbitMQ 的消息默认存放在内存上面,如果不特别声明,消息不会持久化保存到硬盘上面,如果节点重启或者意外crash掉,消息就会丢失。

要想做到消息持久化,必须满足以下三个条件:

  • Exchange 设置持久化
  • Queue 设置持久化
  • Message持久化发送:发送消息设置发送模式deliveryMode=2,代表持久化消息

消息ACK机制

默认情况消费者收到消息,MQ就会从队列中删除消息,如果消费者没处理成功,消息就丢了,可以使用手动ACK机制,处理完成手动调用MQ的ACK方法通知MQ删除消息。

RabbitMQ集群模式

使用集群模式部署RabbitMQ,实现消息的高可用,避免单个MQ节点挂了,消息就没了。

消息补偿

有时候可能是因为消息过期(TTL)、或者消费者异常导致消息丢了,这个时候需要从业务数据角度,写个脚本重新生成消息,投递到消息队列中。

推荐:详情参考RabbitMQ消息持久化章节


推荐教程