事务消息的流程分析|学习笔记

简介: 快速学习事务消息的流程分析

开发者学堂课程【RocketMQ知识精讲与项目实战(第一阶段)事务消息的流程分析】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/702/detail/12390


事务消息的流程分析


内容介绍:

一、流程分析大框

二、事务消息发送及提交

三、事务补偿

四、事务消息状态

 

一、流程分析大框

消息的发送者发送给 MQ 的消息是带有事务控制的,需要事务提交的,如果没有提

交给事务,是不能被消费者消费的。

非事务类消息,可以直接被消费,而这一类事务消息我们称之为 HalfMsg,在它发送后,MQ 会给予一个结果表示收到,此时就开始处理本地的事务,处理之后要对半消息进行 Commit or Rollback,如果 MQ 提交了,消费者就可以消费了,如果MQ回管了,消息队列就会被删除,因此消费者就会接收不到。

在进行提交或回滚时,有可能本地事务执行失败了,超时没有对半消息进行处理,

那么消息队列会对消息进行回查,它会回调检查消息状态。

检查后,本地检查方法再对消息进行处理,不是提交就是回滚 ,这就是事务消息的

流程。

其中分为两个流程:正常事务消息的发送及提交、事务消息的补偿流程。

image.png


二、事务消息发送及提交

1、发送消息(half 消息)。

2、服务端响应消息写入结果。

3、根据发送结果执行本地事务(如果写入失败,此时half消息对业务不可见,本地逻辑不执行)。

4、根据本地事务状态执行 Commit 或者 Rollback(Commit 操作生成消息索引,消息对消费者可见)

 

三、事务补偿

1、对没有 Commit/Rollback 的事务消息(pending 状态的消息),从服务端发起一次“回查”

2、Producer 收到回查消息,检查回查消息对应的本地事务的状态

3、根据本地事务状态,重新 Commit 或者 Rollback

其中,补偿价段用于解决消息 Commit 或者 Rollback 发生超时或者失败的情况。

 

四、事务消息状态

事务消息共有三种状态,提交状态、回滚状态、中间状态:

TransactionStatus.CommitTransaction:提交事务,它允许消费者消费此消息。

TransactionStatus.RollbackTransaction:回滚事务,它代表该消息将被删除,不允

许被消费。

TransactionStatus.Unknown:中间状态,它代表需要检查消息队列来确定状态。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2月前
|
消息中间件 监控 安全
大事务+MQ普通消息线上问题排查过程技术分享
【8月更文挑战第23天】在复杂的企业级系统中,大事务与消息队列(MQ)的结合使用是一种常见的架构设计,用于解耦系统、提升系统响应性和扩展性。然而,这种设计也带来了其特有的挑战,特别是在处理退款业务等涉及金融交易的高敏感场景时。本文将围绕“大事务+MQ普通消息线上问题排查过程”这一主题,分享一次实际工作中的技术排查经验,旨在为大家提供可借鉴的解决思路和方法。
44 0
|
3月前
|
消息中间件
分布式篇问题之通过本地消息表实现分布式事务的最终一致性问题如何解决
分布式篇问题之通过本地消息表实现分布式事务的最终一致性问题如何解决
|
4月前
|
消息中间件 IDE 数据库
RocketMQ事务消息学习及刨坑过程
RocketMQ事务消息学习及刨坑过程
|
4月前
|
消息中间件 网络性能优化 RocketMQ
消息队列 MQ产品使用合集之本地事务还没有执行完就触发了回查是什么导致的
阿里云消息队列MQ(Message Queue)是一种高可用、高性能的消息中间件服务,它允许您在分布式应用的不同组件之间异步传递消息,从而实现系统解耦、流量削峰填谷以及提高系统的可扩展性和灵活性。以下是使用阿里云消息队列MQ产品的关键点和最佳实践合集。
|
5月前
|
传感器 SQL Java
Flink撤回机制问题之撤回机制不起作用如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
5月前
|
存储 消息中间件 关系型数据库
解密分布式事务:CAP理论、BASE理论、两阶段提交(2PC)、三阶段提交(3PC)、补偿事务(TCC)、MQ事务消息、最大努力通知
解密分布式事务:CAP理论、BASE理论、两阶段提交(2PC)、三阶段提交(3PC)、补偿事务(TCC)、MQ事务消息、最大努力通知
122 0
|
消息中间件
分布式事务解决方案之一:MQ异步确保事务
分布式事务解决方案之一:MQ异步确保事务
|
消息中间件 缓存 数据库
4 张图,9 个维度告诉你怎么做能确保 RocketMQ 不丢失消息
4 张图,9 个维度告诉你怎么做能确保 RocketMQ 不丢失消息
410 0
4 张图,9 个维度告诉你怎么做能确保 RocketMQ 不丢失消息
|
消息中间件 存储 网络协议
多类型业务消息专题-事务消息 | 学习笔记
快速学习多类型业务消息专题-事务消息
133 0
多类型业务消息专题-事务消息 | 学习笔记
|
消息中间件 中间件 Java
分布式事务解决方案-消息中间篇|学习笔记
快速学习分布式事务解决方案-消息中间篇
144 0
分布式事务解决方案-消息中间篇|学习笔记