消息队列MQ如何保证消息不丢失

消息队列防止消息不丢失

1、 生产者发送消息到broker失败;生产者使用事务消息。

2、 Broker集群主从同步失败;两阶段提交,多数节点成功后提交。

3、 MQ异步刷盘,可能会消息丢失;改为同步刷盘。

4、 Broker发送消息到消费者失败;消费者ack机制。

5、 MQ集群挂掉了,生产者无法发送消息到MQ;消息临时存储在redis、文件或数据库中。

 

 

事务状态为unknown状态,MQ会循环重试4567步骤。

1-2:half机制确认MQ是否正常。

3:执行本地事务失败(如数据库挂了),会将消息存储起来。MQ重试机制至本地事务成功后执行后面的操作。

6:下单支付链路中,如要求下单后10分钟完成支付。MQ重试机制,下单后支付状态为unknown,最多重试10次检查支付状态是否成功,成功则commit,失败则rolllback。

 

 

 

 

 

 

MQ挂了,生产者把消息存盘,redis、文件或数据库等。定时任务扫描把消息发送到恢复后的MQ中。

 

 

 

 

 

 

 

1、 增加队列数量,多个消费者消费队列的消息;

2、 无法动态扩容的情况下,增加topic,增加queue

 

原文地址:https://www.cnblogs.com/chenfx/p/15772840.html