博客
关于我
技术干货 | 源码解析 Github 上 14.1k Star 的 RocketMQ
阅读量:163 次
发布时间:2019-02-27

本文共 863 字,大约阅读时间需要 2 分钟。

RocketMQ 事务消息发送流程分析

作为发送方,RocketMQ 的事务消息发送流程分为两个阶段:一阶段和二阶段。以下是详细的分析:

一阶段发送

一阶段发送是通过 sendMessageInTransaction 方法进行的,主要步骤包括:

  • 消息有效性校验:检查消息的有效性,包括 topic 是否有效以及消息体长度是否在允许范围内。
  • 设置事务标识符:将消息的属性中设置事务标识符,确保消息在二阶段可以正确识别。
  • 发送消息:使用同步模式发送消息到 Broker,确保发送结果。
  • 处理重试:在发送失败时,自动重试,最大重试次数为三次。
  • Broker 选择和异常规避:选择可用的 Broker,避免发送至不可用的 Broker,确保消息高效可靠地发送。
  • 本地事务执行

    一阶段发送结果确定后,决定是否执行本地事务:

  • 结果判断:根据发送结果判断是否需要执行本地事务。如果发送结果为 SEND_OK,则进入本地事务执行。
  • 本地事务执行:通过 localTransactionExecutertransactionListener 执行本地事务,确保数据一致性。
  • 状态更新:根据本地事务的执行结果,更新事务状态,决定是否提交或回滚。
  • 二阶段处理

    二阶段处理通过 endTransaction 方法进行:

  • 构造请求:构造请求头,包括事务标识符、提交或回滚的指令。
  • 发送二阶段消息:使用 oneway 模式发送二阶段消息到 Broker,确保可靠性。
  • 处理回查:Broker 在一定时间后主动回查消息状态,确保二阶段处理结果可靠。
  • 消息回查机制

    RocketMQ 的回查机制确保事务消息的二阶段结果可靠,防止消息提交不确定性。Broker 会在一定时间后回查消息状态,确保消息处理结果正确无误。

    总结

    RocketMQ 的事务消息发送流程通过一阶段同步发送和本地事务执行,确保消息可靠性;二阶段处理和回查机制,确保事务的原子性和一致性。这种设计既保证了消息的高效传输,又确保了数据的可靠性和一致性,是一个高效且可靠的消息中间件方案。

    转载地址:http://bqeb.baihongyu.com/

    你可能感兴趣的文章
    Python 余弦相似度与皮尔逊相关系数 计算
    查看>>
    python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
    查看>>
    python 使用filetype校验文件
    查看>>
    Python 使用flush函数将缓冲区数据立即写磁盘
    查看>>
    python 使用in判断不准确,in不好使
    查看>>
    Python 使用pandas 进行查询和统计详解
    查看>>
    Redis 配置文件redis.conf详细解释
    查看>>
    python网络爬虫(2)——scrapy框架的基础使用
    查看>>
    python网络爬虫实例教程试读_Python网络爬虫实战教程(全套完整版) - 学途无忧网 - 做技术的王者 - Powered By EduSoho...
    查看>>
    Python 使用哈希函数用于加密
    查看>>
    Python 依赖管理的革新——Poetry 深度解析
    查看>>
    python 保留精度及增加去除数字的千位分隔符(金额化数字)
    查看>>
    python 倒计时 9,8,7,。。。。。。0
    查看>>
    Python 入门开发学习笔记之数据的增删改查
    查看>>
    Python 入门教程(2)搭建环境 2.4、VSCode配置Node.js运行环境
    查看>>
    Python 八大排序算法合集
    查看>>
    python 关于epoll的学习
    查看>>
    Python 内存管理
    查看>>
    Python 内嵌函数:它们有什么用处?
    查看>>
    Python 内置 sum 函数 vs. for 循环性能
    查看>>