zoukankan      html  css  js  c++  java
  • 消息队列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

     

  • 相关阅读:
    promise实现(未实现微任务)
    fastclick猜的原理
    js进制
    如何造一个好的组件库【有空就更新】
    BEM的命名
    unicode、utf-32、utf-8、utf-16
    getElementsByTagName、getElementsByClassName与querySelectorAll的区别
    为什么vue中没有事件委托/事件代理的概念
    vscode注释param
    复制dom
  • 原文地址:https://www.cnblogs.com/chenfx/p/15772840.html
Copyright © 2011-2022 走看看