怎么保证消息的不丢失

怎么保证消息的不丢失

原因

  • 消息生产者没有成功发送到MQ Broker

  • 消息发送给MQ Broker后,Broker 宕机后导致内存中的消息数据丢失

  • 消费者获取到消息,但消费者还没有来得及处理宕机了,但此时MQ中的消息已经删除,消费者重启后不能再消费之前的消息

解决思路

  • 消息发送者发送给MQ Broker后,MQ Broker给生产者确认收到。
    • confirm模式用的居多:一旦channel进入confirm模式,所有在该信道上发布的消息都将会被指派一个唯一的ID(从1开始),当消息都被投递到队列后,MQ会发送一个ACK给生产者,如果没有处理消息,则会发送Nack。
  • MQ收到消息后进行消费持久化
    • 将queue的持久化标识durable设置为true,代表持久的队列
    • 发送消息的时候将deliveryMode=2(即消息的持久化)
  • 消费者收到消息处理后手动进行ack确认
    • 将autoAck设置为false
  • MQ收到消费者ack确认后删除持久化消息
posted @ 2020-12-19 17:51  天宇轩-王  阅读(138)  评论(0编辑  收藏  举报