RocketMq消息丢失问题解决

分享一个链接:https://www.zhihu.com/tardis/sogou/art/166426241

RocketMq消息丢失问题解决

这个图很好,基本上就是这个问题的解决思路。我这里总结一下:

为什么会消息丢失?

  • 存储在队列中,如果队列没有对消息持久化,RabbitMQ服务器宕机重启会丢失数据。
  • 生产者发送消息到RabbitMQ服务器过程中,RabbitMQ服务器如果宕机停止服务,消息会丢失。
  • 消费者从RabbitMQ服务器获取队列中存储的数据消费,但是消费者程序出错或者宕机而没有正确消费,导致数据丢失。

解决方法:1.消息持久化(Exchange交换机持久化     Queue持久化) 

消息持久化可以防止消息在MQ Server中不会因为宕机重启而丢失。

 2.消息确认机制(confirm机制,事务机制)    

(1)confirm机制:通过两个回调函数确认confirm(),returnedMessage();

首先在配置文件中配置,接着需要定义回调方法。

confirm模式,作用是为了保证生产者投递到Mq不会出现消息丢失。

(2)事务机制:首先在配置文件中配置,然后编写消费者的监听器