知识图谱

消息中间件 - 图1

RabbitMQ保证数据不丢失

原文:https://mp.weixin.qq.com/s/qNjFpQFBerJZOsixg49HiQ

image.png
消息从生产端到消费端完成消费,一共要经过三个阶段:生产端发送消息到MQ、MQ将消息发送至消费端、消费端完成消费。
以上三个阶段过程都有可能造成消息丢失,如宕机、网络卡顿等(磁盘损坏、机房爆炸等现象不包括在内)。

  • 生产端可以通过确认机制、消息存盘来保证传递至MQ的有效性;
  • MQ可以通过每个步骤都进行存盘保证有效性;
  • 消费端通过手动ack来保证消息不丢失。

    生产端到MQ

    可能发生故障的原因:发送消息的时候生产端挂掉、网络问题或是MQ直接挂掉了。
    发送端需要将消息存入数据库,来记录哪些信息已经完成发送,比如利用flag来记录
    image.png
    RabbitMQ提供两种机制:事务机制(性能较差)、Confirm消息确认机制
    确认机制,简单来说就是回复一个确认信息:
    image.png

    RabbitMQ持久化

    消息到达RabbitMQ后:
    image.png
    RabbitMQ的Exchange和Queue、message都可以进行持久化。

    消费端

    消费端持久化主要依靠MQ的手动ACK,默认是自动ACK,即RabbitMQ发送一条消息之后,不管后续如何,直接将消息删除了,而手动ack需要接收到消费端的完成回复才能够删除,消费端要保证幂等性
    image.png