怎么用消息队列实现分布式事务?
当消息队列和事务联系在一起时,它指的是消息生产者和消息消费者之间如何保持数据一致性。
什么是分布式事务?
事务是指当我们进行若干项数据更新操作时,为了保证数据的完整性和一致性,我们希望这些更新操作要么都成功,要么都失败。而更新的数据,并不局限于数据库中的数据,它可以是磁盘上的文件,也可以是一个远程服务,或者以其他形式存储的数据。
事务会有四个特性,俗称ACID:
- 原子性(A),一个事务操作不可分割,要么成功,要么失败。
- 一致性(C),指数据在事务执行完成的时间之前,读到的一定是更新前的数据,之后读到的一定是更新后的数据,不存在一个时刻,让用户读到更新过程中的数据。
- 隔离性(I),一个事务的执行不应该被其他事务干扰。
- 持久性(D),一个事务一旦完成提交,后续的其他操作和故障都不会对事务的结果产生影响。
对于分布式系统来说,严格实现ACID几乎是不可能的,或者说代价太过,因此,我们在保证可用性和不严重牺牲性能的前提下,实现数据一致性已经很困难,因此,出现了很多变种,例如顺序一致性、最终一致性等。
目前大家所说的分布式事务,更多情况下,是在分布式系统中事务的不完整实现,在不同的应用场景中,有不同的实现,目的都是通过一些妥协来解决实际问题。
在实际应用中,比较常见的分布式事务有2PC(Two-phase Commit,二阶段提交)、TCC(Try-Confirm-Cancel)和事务消息。
事务消息使用的场景主要是那些需要异步更新数据,并且对数据实时性要求不太高的场景。
消息队列如何实现分布式事务?
事务消息需要消息队列提供相应的功能才能实现,Kafka和RocketMQ都提供了事务相关功能。
下面以下订单为例,说明一下如何使用消息队列实现分布式事务。
首先,订单系统在消息队列上开启一个事务,然后订单系统给消息服务器发送一个“半消息”,这个半消息不是说消息内容不完整,它包含完整的消息内容。半消息和普通消息的唯一区别,是在事务提交之前,对于消费者来说,这个消息时不可见的。
半消息发送成功后,订单系统就可以执行本地事务了,在订单中创建一条订单记录,并提交订单库的数据库事务。然后根据本地事务的执行结果决定提交或者回滚事务消息。如果订单创建成功,那么就提交事务消息,购物车系统就可以消费到这条消息继续后续的流程。如果订单创建失败,就回滚消息,购物车系统就不会受到这条消息。这样基本实现了“要么都成功,要么都失败”的一致性要求。
那么当提交事务消息时失败了,应该怎么处理呢?对于这种情况,Kakfa的解决方案比较简单粗暴,直接抛出异常,让用户自行处理。RocketMQ会使用事务反查的机制来解决事务消息提交失败的问题。订单系统作为Producer,在提交或者回滚事务消息时发生网络异常,RocketMQ的Broker没有收到提交或者回滚的请求,Broker会定期去Producer上反查这个事务对应的本地事务的状态,然后根据反查结果决定提交或者回滚这个事务。
我们的业务代码中需要实现一个反查本地事务状态的街口,告知RocketMQ本地事务是成功还是失败。
下面是用RocketMQ进行事务处理的流程图。

相关文章:
怎么用消息队列实现分布式事务?
当消息队列和事务联系在一起时,它指的是消息生产者和消息消费者之间如何保持数据一致性。 什么是分布式事务? 事务是指当我们进行若干项数据更新操作时,为了保证数据的完整性和一致性,我们希望这些更新操作要么都成功࿰…...
什么蓝牙耳机佩戴舒适?2023长时间佩戴最舒适的蓝牙耳机
现如今,很多蓝牙耳机的产品都在不断地更新,市面上的耳机也是越来越普及,可以说是成为我们日常生活中不可或缺的一类电子设备,下面介绍一些佩戴舒适性好的蓝牙耳机。 一、南卡小音舱蓝牙耳机 音质推荐指数:★★★★★…...
刮刮乐--课后程序(Python程序开发案例教程-黑马程序员编著-第4章-课后作业)
实例1:刮刮乐 刮刮乐的玩法多种多样,彩民只要刮去刮刮乐上的银色油墨即可查看是否中奖。每张刮刮乐都有多个兑奖区,每个兑奖区对应着不同的获奖信息,包括“一等奖”、“二等奖”、“三等奖”和“谢谢惠顾”。假设现在有一张刮刮乐…...
LeetCode 全题解笔记:两数相加(02)
两数相加(medium) 题目描述 给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储 一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数…...
网络工程师面试题(面试必看)(1)
作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.正题 1.TCP UDP协议的区别...
MySQL基础操作指南:第一篇
MySQL基础操作指南 一、数据库操作 1.1 概念阐述 基本操作语法结构创建数据库create database 数据库名 character set utf8;删除数据库drop database 数据库名选择数据库use 数据库名;查看当前选择的数据库select database();查看当前数据库包含的数据表show ta…...
C#中包含?的运算符使用汇总
总目录 文章目录总目录前言一、使用概述二、使用说明1.可空类型修饰符2.三目运算符3.空合并运算符4.NULL 检查运算符结语前言 本文将含有?运算符的各种使用进行汇总,方便系统性记忆和知识回顾。 一、使用概述 用法描述?可空类型修饰符?:三目运算符?…...
剑指 Offer 56 - I. 数组中数字出现的次数
剑指 Offer 56 - I. 数组中数字出现的次数 难度:middle\color{orange}{middle}middle 题目描述 一个整型数组 numsnumsnums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度…...
MySQL事务日志
1.概述 事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢? 事务的隔离性由 锁机制 实现而事务的原子性、一致性和持久性由事务的 redo 日志和undo 日志来保证 REDO LOG 称为 重做日志,提供再写入操作,恢复…...
极速开发,无限可能,2023网易低代码大赛全新赛季启动
去年火爆的低代码大赛还犹在目,近800人用轻舟低代码平台畅享开发乐趣。这不,2023网易低代码大赛即刻启动,3月6日至3月27日限时开放报名,全新角逐,正式展开!1\ 获胜者可得万元大奖、猪厂工作机会 /Low Code …...
C++ | 详细介绍缺省参数的作用
文章目录一、前言1、缺省参数概念2、缺省参数的使用规则二、全缺省参数【备胎是如何使用的♿】1、四种实参传递方式说明2、疑难细究三、半缺省参数【⭐】1、错误用法示范2、正确用法示范🔥实参缺省与形参缺省的混合辨析🔥3、小结四、缺省参数的实际应用 …...
【sdx62】sdx62分析代码中Serial Number的寄存器地址及获取Serial Number的方法
计算Serial Number寄存器地址 查看Serial Number ./boot_images/boot/QcomPkg/SocPkg/Library/XBLLoaderLib/boot_info_log.c /* Array of raw fuse addresses and names to be logged during boot loginitialization. Array must be null terminated. */ static struct boot_…...
MATLAB的快速入门
第一部分:基础知识常用命令:clc %清除命令行窗口 clear %清空工作区数据 cd %显示或改变工作目录 clf %清除图形窗口 help %打开帮助文档 save %保存内存变量到指定文件 hold %保持图形 close %关闭当前图窗 quit %退出变量&#x…...
Python中赋值、引用、深浅拷贝的区别和联系
文章目录一、对象的唯一id二、赋值三、可变对象和不可变对象四、函数的参数传递五、深拷贝和浅拷贝六、举个栗子6.1 不可变对象的拷贝6.2 可变对象的拷贝6.3 可变对象改变外层元素6.4 可变对象改变内层元素七、总结一、对象的唯一id python中的所有对象都有自己的唯一id&#…...
春招冲刺(十一):前端面试之网络总结
网络总结 Q1: GET和POST的请求的区别 应用场景:Get是一个幂等请求,一般用于请求资源。post不是幂等请求,一般用于修改资源。缓存:Get请求一般缓存,Post一般不缓存报文格式:Get请求体一般为空,…...
Mybatis插件
插件使用 动手实现plugin 首先我们需要实现一下这个Interceptor,其中plugin和setProperties方法可以不实现,plugin是因为已经有了完善的逻辑,而setProperties,如果不需要在intercept()中使用属性,也可以不设置。然后…...
计算机学科专业基础综合科目(408)
文章目录408 第一章 数据结构数据是客观事物的符号表示,是对现实世界的事物采用计算机能够识别,存储和处理的形式进行描述的符号的集合。 数据元素是数据的基本单位。一个数据元素由若干个数据项组成。数据项又成为简单数据项及复合数据项两种。简单数据…...
centos7安装教程
1.点击文件–新建虚拟机 2.根据图片一直下一步或者做一些改动 3. 点击自定义硬件,点击浏览选中下载好的ISO文件 4.配置完成后启动虚拟机 5.选择语言,中英文都可,按需求选择 6.进行设置目标位置,配置分区 7.选择网络和主机名 8.配置…...
Kafka 重平衡
Kafka 重平衡协调者RebalanceRebalance 条件Rebalance 避免Rebalance : 让单 Group 下所有的 Consumer 怎么消费订阅主题的所有分区Rebalance 时 , 所有 Consumer 要共同参与 (无法消费),在协调者 (Coordinator) 协调下,完成订阅主题分区的分配 协调者…...
PTA:L1-022 奇偶分家、L1-023 输出GPLT、L1-024 后天(C++)
目录 L1-022 奇偶分家 问题描述: L1-023 输出GPLT 问题描述: 实现代码: L1-024 后天 问题描述: 实现代码: 简单题,没写题解,看代码就能看懂 L1-022 奇偶分家 问题描述: 给…...
Wand-Enhancer:如何通过本地客户端增强技术提升Wand应用体验
Wand-Enhancer:如何通过本地客户端增强技术提升Wand应用体验 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer Wand-Enhancer是一款针对Wand&a…...
Win10下ENSP USG6000镜像加载卡在###?别慌,VirtualBox网卡桥接这个设置是关键
Win10下ENSP USG6000镜像加载卡在###的终极解决方案 当你满怀期待地在Windows 10上启动ENSP模拟器,拖入USG6000防火墙设备,却只看到一串无情的 ### 符号时,那种挫败感我深有体会。作为一名曾经被这个问题折磨数小时的网络工程师,…...
VAE-TCN时间序列分析:从架构稳定性到复杂模式挖掘
1. 项目概述与核心问题在量子物理、金融预测、工业物联网这些领域,我们常常要和一堆按时间顺序排列的数据点打交道,这就是时间序列。传统上,用循环神经网络(RNN)或者长短期记忆网络(LSTM)来处理…...
使用C#代码重新排列PDF页面的操作代码
引言对于页面顺序混乱的 PDF 文档,重新排列页面可以避免读者产生困惑,同时也能让文档结构更加清晰有序。本文将演示如何使用 Spire.PDF for .NET 以编程方式重新排列现有 PDF 文档中的页面。安装 Spire.PDF for .NET首先,需要将 Spire.PDF fo…...
旅游客服响应时效提升至8.3秒?揭秘某出境游龙头AI Agent上线72小时后的5项关键调优动作
更多请点击: https://codechina.net 第一章:旅游客服响应时效提升至8.3秒?揭秘某出境游龙头AI Agent上线72小时后的5项关键调优动作 在AI Agent正式上线首周,该出境游平台客服系统平均首次响应时间从原42.6秒骤降至8.3秒…...
诺和新元在华两大重点项目在天津和太仓竣工启用 | 美通社头条
美通社消息:近日,全球领先的生物解决方案合作伙伴诺和新元(Novonesis)分别在天津经济技术开发区(TEDA)与江苏太仓举行重点项目竣工启用活动。诺和新元天津经开区项目竣工启用活动天津新行政办公楼项目是诺和新元在华运营体系的重要升级。本次项目的落成不…...
神经网络辅助可变形匹配滤波器在光通信中的应用
1. 神经网络辅助可变形匹配滤波器技术解析在光通信系统中,匹配滤波器作为信号检测的关键组件,其性能直接影响整个通信链路的可靠性。传统固定匹配滤波器基于理想信道假设设计,当面对实际系统中的带宽限制、大气湍流等复杂信道条件时ÿ…...
React 性能优化:从 3 秒卡顿到 60 帧流畅,我做了这 5 件事
摘要 React 应用越做越大,卡顿问题越来越严重?本文分享 5 个亲测有效的性能优化方案,包括 React.memo 正确使用姿势、useMemo 依赖陷阱、虚拟列表实战、代码分割策略和 Profiler 调试技巧。每个方案都附带真实代码对比,帮你把页面…...
【教育部“人工智能+教育”试点标杆】:从零部署到常态化应用——某省327所乡村校6个月落地实录
更多请点击: https://intelliparadigm.com 第一章:PlayAI教育领域应用案例 PlayAI 作为面向教育场景的轻量级AI交互平台,已在多个K12及职业教育机构落地实践,聚焦于个性化学习路径生成、实时学情反馈与智能助教协同三大方向。其核…...
AI赋能 绿色未来 —— 华硕重磅亮相第二十八届海峡两岸经贸交易会
当AI浪潮席卷全球,绿色低碳成为时代共识,一场汇聚两岸智慧、共探产业新机的盛会如约而至。5月21日第二十八届海峡两岸经贸交易会于福州海峡会展中心盛大启幕。这场由国务院台办、福建省人民政府联合主办的国家级盛会,深耕两岸经贸交流多年&am…...
