知识图谱
RabbitMQ保证数据不丢失
消息从生产端到消费端完成消费,一共要经过三个阶段:生产端发送消息到MQ、MQ将消息发送至消费端、消费端完成消费。
以上三个阶段过程都有可能造成消息丢失,如宕机、网络卡顿等(磁盘损坏、机房爆炸等现象不包括在内)。
- 生产端可以通过确认机制、消息存盘来保证传递至MQ的有效性;
- MQ可以通过每个步骤都进行存盘保证有效性;
- 消费端通过手动ack来保证消息不丢失。
生产端到MQ
可能发生故障的原因:发送消息的时候生产端挂掉、网络问题或是MQ直接挂掉了。
发送端需要将消息存入数据库,来记录哪些信息已经完成发送,比如利用flag来记录。
RabbitMQ提供两种机制:事务机制(性能较差)、Confirm消息确认机制。
确认机制,简单来说就是回复一个确认信息:RabbitMQ持久化
消息到达RabbitMQ后:
RabbitMQ的Exchange和Queue、message都可以进行持久化。消费端
消费端持久化主要依靠MQ的手动ACK,默认是自动ACK,即RabbitMQ发送一条消息之后,不管后续如何,直接将消息删除了,而手动ack需要接收到消费端的完成回复才能够删除,消费端要保证幂等性。