消息队列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