消息中间件之RocketMQ源码分析(二十七)
Broker提交或回滚事务消息
当生产者本地事务处理完成并且Broker回查事务消息后,不管执行Commit还是Rollback,都会根据用户本地事务的执行结果发送一个End_transaction的RPC请求给Broker,Broker端处理该请求的类是EndTransactionProcessor

第一步,End_Transaction请求校验,主要检查项如下
1.Broker角色检查。Slave Broker不处理事务消息
2.事务消息类型检查。EndTransactionProcessor只处理
Commit或Rollback类型的事务消息,其余消息不处理,这里区分了事务回查


第二步,进行Commit或Rollback。
根据生产者请求头中的参数判断,是Commit请求还是Rollback请求,然后分别进行处理

commitMessage()
提交Half消息/这是事务消息服务接口中的一个方法,根据消息位点查询了Half消息,并将Half消息返回


checkPrepareMessage()
Half消息数据校验。校验内容包括发送消息的生产者组与当前执行Commit/Rollback的生产者是否一致,当前Half消息是否与请求Commit/Rollback的消息是否是同一条消息

endMessageTransaction()
消息对象类型转化,将MessageExt对象转化为MessageExtBrokerInner对象,并且还原消息之前的Topic和ConsumeQueue等信息

sendFinalMessage()
将还原后的事务消息最终发送到CommitLog中,一旦发送成功,消费者就可以正常拉取消息并消费

deletePrepareMessage()
在sendFinalMessage()执行成功后,删除Half消息。其实RocketMQ是不能真正删除消息的,其实质是顺序写磁盘,相当于做了一个"假删除"。"假删除"通过putOpMessage()方法将消息保存到TransactionMessageUtil.
buildOpTopic()的Topic中,并且做上标记TransactionalMessageUtil.REMOVETAG,表示消息已删除

- 如果消息被标记为已删除,则调用addRemoveTagInTransactionOp()方法,利用标记为已删除的OP消息构造Message消息对象,并且调用存储方法保存消息

- TransactionalMessageUtil.buildOpTopic()方法跟保存Half消息时的逻辑类似

- Half消息保存在名为MixAll.RMQ_SYS_TRANS_HALF_TOPIC的Topic中,执行Commit和Rollback后的消息都保存在MixAll.RMQ_SYS_TRANS_OP_HALF_TOPIC
对象中,以便Broker判断是否需要回查生产者事务的执行状态。


- 调用存储层方法,真正地将OP消息保存到了CommitLog中

Rollback实现逻辑
Rollback并没有真正删除消息,而是标记Half消息为删除,在Broker回查时机会跳过不检查

rollbackMessage()
该方法与CommitMessage()方法一样,都是查询Half消息并返回消息对象。
checkPrepareMessage()
消息校验,与Commit调用的是同一个方法
deletePrepareMessage()
删除Half消息,与Commit调用的是同一个方法
相关文章:
消息中间件之RocketMQ源码分析(二十七)
Broker提交或回滚事务消息 当生产者本地事务处理完成并且Broker回查事务消息后,不管执行Commit还是Rollback,都会根据用户本地事务的执行结果发送一个End_transaction的RPC请求给Broker,Broker端处理该请求的类是EndTransactionProcessor 第一步&…...
C习题002:澡堂洗澡
问题 输入样例 在这里给出一组输入。例如: 2 5 1 3 3 2 3 3 输出样例 在这里给出相应的输出。例如: No代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB 栈限制 8192 KB 代码 #include<stdio.h> int main() {int N,W,s,t,p;int arr_s[…...
智能双星:遥测终端机与柳林“巡检机器人“,助力智能运维新升级!
随着科技的不断发展,智能化、自动化的运维管理已经成为企业追求高效、稳定运营的重要方向。柳林遥测终端机、柳林e拍云平台以及巡检机器人的组合,为企业带来了一种全新的、前置的、无感的智能运维体验。 柳林遥测终端机,以其强大的数据采集和…...
算法复习之前缀和【备战蓝桥杯】
一维前缀和 S[i] a[1] a[2] ... a[i] a[l] ... a[r] S[r] - S[l - 1]二维前缀和 S[i, j] 第i行j列格子左上部分所有元素的和 以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和为: S[x2, y2] - S[x1 - 1, y2] - S[x2, y1 - 1] S[x1 - 1, y1 - …...
IDEA基础——Maven配置tomcat
配置方案 一、配置maven-tomcat plugin插件(只最高支持到tomcat 8)~~1.添加镜像源,获取tomcat 8插件配置~~~~1.1 在pom.xml里先添加镜像源~~~~1.2 添加tomcat插件配置~~ 2. 添加tomact官方发布的插件配置(无需添加镜像源ÿ…...
数据结构测试题
目录 1.闰年判断 2.志愿者选拔 3.单词接龙 4.对称二叉树 5.英雄南昌欢迎您 6.时间转换 7.矩阵乘法 8. Huffuman树 1.闰年判断 题目描述: 给定一个年份,判断这一年是不是闰年。 当以下情况之一满足时,这一年是闰年: 1. 年…...
【MATLAB】兔子机器人总系统_动力学模型解读(及simulink中的simscape的各模块介绍)
1、动力学模型 Rectangular Joint 控制平面上(x,y轴)的移动,去掉以后,机器人在原地翻滚不移动 Rigid Transform 坐标转换,B站视频已收藏 去掉,机体与地面贴合 此处的作用是设定机体的初…...
Launch学习
参考博客: (1) 史上最全的launch的解析来啦,木有之一欧 1 ROS工作空间简介 2 元功能包 src目录下可以包含多个功能包,假设需要使用机器人导航模块,但是这个模块中包含着地图、定位、路径规划等不同的功能包,它们的逻…...
蓝桥OJ 2942数字王国之军训排队 DFS剪枝
蓝桥OJ 2942数字王国之军训排队 #include<bits/stdc.h> using namespace std;const int N 15;//最多10队 int a[N], n; vector<int>v[N];//二维数组 v[i]记录队伍i中所有人的编号bool dfs(int cnt, int dep) {if (dep n1){//判断合法性for (int i 1; i < n; …...
SSL证书
SSL证书(Secure Sockets Layer证书)是一种网络安全协议,用于在互联网上建立加密链接,确保数据在从用户浏览器到服务器之间传输的过程中保持私密性和完整性。尽管现在实际上已经被TLS(Transport Layer Security…...
【C++】string 类 ( 上)
标准库中的string类 注意: 1. string是表示字符串的字符串类 2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。 比特就业课 3. string在底层实际是:basic_string模板类的别名,typedef basi…...
《中华人民共和国消防法》(2021年修订版)解读
单选题(共7题,每题5分) 1、举办大型群众性活动,承办人应当依法向()申请安全许可。 正确答案:B、公安机关 2、违反消防安全规定进入生产、储存易燃易爆危险品场所的,情节严重的要处…...
vue+element模仿实现云码自动验证码识别平台官网
一、项目介绍 项目使用传统vue项目结构实现,前端采用element实现。 element官网:Element - The worlds most popular Vue UI framework 云码官网地址:云码-自动验证码识别平台_验证码识别API接口_免费验证码软件 项目截图,支持…...
蓝桥杯练习系统(算法训练)ALGO-992 士兵杀敌(二)
资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。 小工是南将军手下的军师&…...
Pycharm下如何生成exe软件
第一步 下载pyinstaller pip install pyinstaller 对pyinstaller第二步 使用pyinstaller cmd切换到项目目录执行命令:pyinstaller --add-data “./templates;templates” 入口文件名.py...
KubeSphere平台安装系列之三【Linux多节点部署KubeSphere】(3/3)
**《KubeSphere平台安装系列》** 【Kubernetes上安装KubeSphere(亲测–实操完整版)】(1/3) 【Linux单节点部署KubeSphere】(2/3) 【Linux多节点部署KubeSphere】(3/3) **《KubeS…...
YOLOv9独家改进|动态蛇形卷积Dynamic Snake Convolution与空间和通道重建卷积SCConv与RepNCSPELAN4融合
专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、改进点介绍 Dynamic Snake Convolution是一种针对细长微弱的局部结构特征与复杂多变的全局形态特征设计的卷积模块。 SCConv是一种即插即用的空间…...
XSS初级漏洞靶场
一、环境的搭建 可以在githb上找靶机包,使用小皮面板搭建在自己本机 与此文章类似(放在www目录下) 二、XSS漏洞简介 1、什么是xss漏洞 当用户访问被xss注入的网页,xss代码就会被提取出来。用户浏览器就会解析这段xss代码&…...
k8s pv与pvc理解与实践
参考文章: https://blog.csdn.net/qq_41337034/article/details/117220475 一、 pv/pvc简述 Pv是指PersistentVolume,中文含义是持久化存储卷是对底层的共享存储的一种抽象,Pv由管理员进行配置和创建,只要包含存储能力ÿ…...
Unity游戏输入系统(新版+旧版)
使用新版还是旧版 旧版 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c5 : MonoBehaviour {void Start(){}void Update(){// 注意要在游戏中 点鼠标键盘进行测试// 鼠标// 0左键 1右键 2滚轮if (Input.GetMouseButtonDown(0)…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
