Java帝国之宫廷内斗(2)

本地消息表实现分布式事务—可靠消息最终一致性解决方案 本地消息表:这是ebay研发出的一种分布式事务解决方案,通过将消息表存储在数据库中,实现了消息的一致性。它的核心思想就将分布式事务拆分成本地事务进行处理本地消息表是利用各系统本地事务来实现分布式事务。业务系统的执行和消息均放入本地消息表中,确保本地业务执行和消息表的操作在一个事务中。不尝机制重试读取本地消息表,调用远程应用操作。需要加入重试机制、最大执行次数、报警机制。本地消息表容忍数据暂时不一致,期望数据的最终一致性。 阅读详情

这是个系列故事,没有读过前两回的不妨看看《持久化:Java帝国反击战》 和 《Java帝国之宫廷内斗》

1

  前情提要

上回说到IO大臣一直被JDBC大臣打压, 为了搞掉JDBC大臣, 他忍辱负重、历经千辛万苦终于搞出了分布式事务的标准Java Transaction API, 满心以为这次必定翻身,但是没想到国王为了平衡朝中的权利, 居然把JTA的管理权赐给了新任的JTA大臣。

更没有想到的是,幸亏自己没有管理JTA,这个官方标准太强调强一致性,和民间的高并发系统要求的最终一致性不合拍,用不起来,变成了JTA大臣的烫手山芋。

和民间代表深谈了一次以后,本来已经心灰意冷的 IO大臣再次激起了雄心壮志: 一定要把JDBC大臣和JTA大臣搞掉。

2

 基本可用

IO大臣马上找了自己的心腹幕僚 InputReader ,  交代了一项任务, 去民间考察这些高并发系统是怎么折腾最终一致性的。

InputReader 连夜出发, 为了不引起JDBC大臣和JTA大臣的注意, 这次特意微服私访。

他不辞辛苦, 跑遍了帝国大大小小几十个高并发系统, 与大量的民间领袖深入地交换了意见。  他越谈越惊心: 我们总是高高在上地制定所谓官方标准,自我感觉良好,实际上根本没人用, 前有EJB, 今有JTA, 都是脱离了实际需求想出来的。

3个月后, InputReader 已经成竹在胸, 回到京城向大人汇报。

“大人, 据小人观察, 我们的JTA用的人确实很少,我现在是理解了他们民间所说的最终一致性了”

看着黑瘦的InputReader, IO大臣心里非常感动,  暗下决心: 等老夫控制了朝局, 一定给忠于自己的InputReader升两级。

“还是拿那个转账的例子来说吧”  InputReader 喝了口茶继续说  “ 假设两个账户(吕秀才和郭芙蓉)在两个独立的数据库中, 我们原来设计的JTA是要求从吕秀才账户减去100两银子, 然后在郭芙蓉账户加上100两银子, 这两个操作要么全部做完,要么全部不做, 但是在网络的环境下, 这是不大容易做到的, 或者说在高并发的情况下做到的代价太高。”

“这我理解,上次说了,  你说说民间到底是怎么实现的。” IO大臣有点心急。

“其实特别简单, 他们用了一个叫做消息队列的东西来实现的, 大人请看 ”  InputReader 展开了一张图:

0?wx_fmt=png

(码农翻身注: 消息队列的故事参见《Java 帝国之消息队列》)

IO大臣看着图: “就这么简单?”

InputReader 说: “小人举的是个非常简单的例子, 但是也能说明问题了, 你看我们想从吕秀才账户转100两银子给郭芙蓉, 需要在数据库1发起一个事务, 从吕秀才账户扣除100两, 然后还得向消息队列插入一条给郭芙蓉账号增加100两的消息, 然后这个数据库1的事务就结束了!  消息队列中的消息会在某一刻被读取出来,进行处理,给郭芙蓉的账号增加100两。”

“那给郭芙蓉添加100两的消息什么时候会被处理呢? ”

“这个时间不确定, 就看具体怎么实现了, 比如有个后台程序定期运行,读取消息来处理 ”

“那万一消息队列down机怎么办? ”

“不用怕, 消息队列的数据都是持久化到硬盘上的, 不会丢失。”

“郭芙蓉这么刁蛮, 这100两银子不能立刻到账, 她还不把吕秀才给‘排山倒海’了?”

“大人,这就是关键了,你想啊, 假设数据库2 down机了, 对郭芙蓉有两种选择: 一种是由于系统原因,转账操作完全不能操作,另外一种是可以转账,但是钱稍后到账,你说郭芙蓉会选哪一种?”

IO大臣说: “有道理,第一种情况是完全不可用, 第二种只是是部分可用, 郭芙蓉肯定会先让吕秀才转账, 反正100两银子是自己的, 早一点晚一点也没关系。 ”

“对的, 这就是最终一致性,数据虽然在某些时候看起来不一致,吕秀才的钱少了但是郭芙蓉的钱没增加,这个时候钱在消息队列中暂时存着呢。”

“这样做有什么好处?”

“好处很大,对于高并发的场景,转账的时候扣完钱, 向消息队列插入消息,事务就结束了, 根本不用什么两阶段提交, 性能很好。”

“嗯,不错, 我们再来看看一些细节吧。。。。。。”

3

  走漏风声

天下没有不透风的墙, JDBC大臣的密探早已潜伏在IO府中好多年了,虽然只是个端茶送水的下人, 但是很多消息都进入了他的耳朵, 然后又进入了JDBC大臣的耳朵。

JDBC大臣找来了JTA大臣前来商议, 为了找一个同盟军和强大的IO大臣对抗, JDBC大臣收买了不干实事的JTA大臣。

“你知道吗? IO老头儿派人出去调查了, 我估计很快就会像上次那样参我一本。” JDBC大臣忧心忡忡。

“这IO老头儿为啥老是和大人过不去呢, 守好他那一亩三分地多好!”

“人的欲望都是无穷的,再说我这几年确实打压他比较厉害, 不说了,你先看看这张图, 是我们的卧底从IO府中偷出来的。”

JTA大臣抽了一口冷气:“现在民间都这么玩了? 不用JTA了? ”

“是啊, 你看他们的方法还不错嘛, 基本可用,最终一致性。真是实践中出真知啊”  JDBC大臣感叹道,他在观察JTA的反应。

“大人, 我建议咱们抢先一步, 明天早朝就把这幅图献给陛下,陛下一高兴,估计就会把这一块儿划给我管了, 不不, 是给你管了。 ”

“这合适吗?”

“无毒不丈夫, 朝中争斗本来就是你死我活的, 大人不可太妇人之心了。”

“好,就这么办。”

4

  宫廷激辩

国王已经厌倦了早朝, 厌倦了臣子们在朝中争来争去。

这天出奇的平静, JDBC大臣和IO大臣没有像之前那样争得不可开交, 国王正要宣布 “有事启奏,无事退朝”  , 一直以来战战兢兢的JTA大臣咳嗽了一声, 发言了 :

“陛下,臣最近得到一个民间上供的设计图,说是民间用了一种新型办法来处理高并发问题 ”  JTA 一边把偷来的图纸呈上去,一边用余光迅速地扫了一眼IO大臣。

JDBC在一旁添油加火:“陛下,臣也看过这个设计, 觉得非常不错, 建议帝国设立标准推广。”

IO大臣一切都明白了,自己还没有出手,这俩老头儿先下手为强了。

国王自然是看不懂,听到两位大臣都这么肯定, 懒洋洋的说: “爱卿此言不错,这个既然属于分布式事务, JTA大臣,你来领衔把他设计出来。”

IO大臣看准时机,突然出手:“陛下万万不可, 这个设计有重大缺陷啊!”

“什么缺陷? ” JDBC大臣和IO大臣齐声问道。

IO大臣胸有成竹, 一切尽在计划之中,那个图纸只不过是个小诱饵而已,这两个愚蠢的老头儿果然上钩。

“陛下,请看这个图纸, 吕秀才给郭芙蓉转账的时候,图纸中写的是:”

0?wx_fmt=png

0?wx_fmt=gif

“我想请问JDBC老头儿, 不, 大臣, 这个事务同时操作了数据库和一个消息队列, 这两个东西是完全不同的, 请问你是怎么实现的?不会还是使用老掉牙的JTA吧”

(码农翻身注: JTA不仅仅可以支持数据库, 只要是支持XA协议的数据源都可以)

JDBC心中大叫不好,中计了!  唉,自己怎么不仔细研究下图纸呢, 这么一个缺陷竟然没有发现, 冒冒失失地献给陛下,真是不可饶恕啊!

可是他不甘心就此失败, 稍一定神,立刻反击: “先不说缺陷问题, 我想问你这个图纸刚才只有陛下看了, 你怎么知道其中内容?!”

IO大臣看到他反咬一口,岂能罢休 ,一不做二不休,干脆撕破脸: “陛下, 这张图纸本来是我府中的InputReader 走遍帝国,遍访民间疾苦画出来的, 我们知道有缺陷, 还没来得及修改,就被他俩给偷了去 !”

“你血口喷人!”  JDBC和JTA有些心虚了。

“陛下,我已经抓住了偷窃图纸的佣人, 随时可以传唤。”

国王一切都明白了: 这些大臣之间的争斗真是无处不在啊, 每天如此,都不能让我消停一天。

“爱卿,” 国王对IO大臣说, “你先说说怎么解决那个图纸中的缺陷问题吧”

“陛下,其实有很多办法, 比如这一种”  IO大臣从袖中掏出一个图纸,举了起来,让大家都能看到:

0?wx_fmt=png

0?wx_fmt=gif

“在这里,我们可以添加一个‘事件表’, 转账开始的时候,把吕秀才的100两银子扣除, 同时还向事件表插入一行记录: 需要向郭芙蓉转100两, 由于这两个表是在同一个数据库中,所以直接使用本地事务就行。不用什么分布式事务。”

“你那个定时运行程序干嘛?”  JTA大臣理解力有限

“就是定时运行, 从事件表中取出记录, 向MQ写入消息, 然后把记录的状态改成‘DONE’, 这样下次就不用再去取去处理了。 ”

JDBC大臣很老练: “那你这个定时运行程序也有问题啊, 比如说它读了数据,向消息队列写入了消息, 还没来得及把事件表的status 改为 ‘DONE’ 就崩溃了,等到定时运行程序重启以后,岂不再次读取, 再次向MQ写入消息,这样郭芙蓉不就得到了200两银子,整个系统就不一致了。”

IO大臣心里有点佩服,  这老头儿还是有两把刷子的。 幸亏我和InputReader讨论过各种细节,要不然还真被他给问住, 那在陛下面前就悲催了。

5

  幂等性

“其实这里必须得引入一个概念: 幂等性”   IO大臣说

“迷瞪性? 这是什么东西 ”   JTA大臣大惑不解。

“是幂等性, mi ,四声”     IO大臣对朝中有这样不学无术占据高位的家伙感到很悲哀, “这个幂等性说的是当你对一个事物操作的时候,可以一直重复地操作,那个事物不受影响, 例如对郭芙蓉的账号你查询一千次,一万次,账户余额还是那么多,不会变化。 转账操作就不是一个幂等性操作。 每次操作都会导致账号的变化。”

JDBC大臣也不由地鄙视了下JTA老头儿, 他说:“我明白了,你的意思是说那个定时运行的程序可以出错,可以向消息队列写入多次 ‘给郭芙蓉账号增加100两银子’ 这样的消息, 但是郭芙蓉那边在执行的时候, 肯定也要判断之前是否执行过了, 如果没有的话就增加, 如果执行过了就简单的抛弃这个消息即可。 ”

IO大臣向JDBC大臣投去了佩服的目光, 两人目光相遇, 碰出来了惺惺相惜的火花。

“唉, 我要是早点和JDBC/IO大臣合作多好”  两个人都在暗自吃后悔药。

IO大臣说: “是的, 郭芙蓉那边在判断是否已经执行过的时候,也需要查询之前的执行记录, 这就意味着之前执行过的也需要用一个表保存下来才行。”

“众位爱卿, 看来已经讨论得差不多了, 接下来怎么办啊?”

没人出声。

“那要不这样, 既然是民间先做出来的东西, 我们官方就不用去凑热闹了, 让他们自生自灭吧”  国王祭出了“无为而治” 的大法, 其实他实在不想再调停这几个大臣之间的争斗了。

IO大臣想发言却又忍住了,经过这一番较量, 他看清楚了各位大臣的实力, 也理解了国王的苦衷, 如果再这么争斗下去陛下估计会龙颜大怒, 算了,不争了。

傻傻的JTA大臣还不死心, 一直给JDBC大臣使眼色,只是JDBC大臣心中打定了和IO大臣一样的主意,微闭双眼开始养神了。

IO大臣心情平静地回到家中, 幕僚们围上来询问结果, 他们还做着升官发财的美梦。

IO大臣看着这些急于知道结果而显得特别饥渴的表情, 笑着摆了摆手, 一言不发地离开了。

很久以后,朝中得知民间有个叫做Dan Pritchet的人, 把这种方法总结了一下,称之为BASE模型, 从此流行开来。


你看到的只是冰山一角, 更多精彩文章,请移步《码农翻身2016文章精华》或者《码农翻身2017上半年文章精华》

有心得想和大家分享? 欢迎投稿 ! 我的联系方式:微信:liuxinlehan  QQ: 3340792577


码农翻身

用故事讲述技术

0.jpeg

基于本地事务表+MQ实现分布式事务 分布式事务解决方案有许多比如二阶段提交、TCC、最大努力通知、Saga事务等,本文介绍本地消息表+MQ这种方式解决分布式事务消息最总一致性问题。目前利用本地消息表+MQ方案实现最终消息一致性的比较多,它的核心思想是,将分布式事务拆分成本地事务进行处理,不同事务之间通过消息表和MQ通信,最后通过定时任务扫描失败的数据进行重试,当在有效重试次数限制内,再次重试回调失败的数据,最终实现消息重复发送,达到一致性。本地消息表实现最终一致性。将rocketmq-dashboard导入到idea中,在idea编译启动。 阅读详情

相关推荐

LTX-2.3 V1.6:8G显存本地AI视频生成工具与int8量化加速实践

这次我们来看一个本地部署的AI视频生成工具——LTX-2.3文字图片生成带音频视频工具V1.6版本。这个工具最大的特点是支持int8量化加速,相比原版提速2-4倍,效果更好,而且8G显存就能运行,不需要搭建复杂环境,解压即可使用。 对于想要在本地电脑上快速生成带音频视频内容的用户来说,这个工具解决了几个关键痛点:首先是硬件门槛低,8G显存意味着大多数主流游戏显卡都能胜任;其次是部署简单,避免了Python环境配置、依赖包冲突等常见问题;最后是性能优化明显,int8加速让生成速度大幅提升。 本文会重点演示如何

hqmln的博客 1236

基于本地消息表的分布式事务解决方案总结

什么是分布式事务 一个应用系统操作两个数据库(两个不同的主节点上), 要使数据强一致性, 此时就不能用传统的事务来解决强一致性, 此时需要用到分布式事务 CAP原则 C consistency(一致性), A (availability)可用性 P(paratiton tolerance)区分容错性。 CAP原则指CAP三者不能同时满足,要么能同时满足AP 要么同时满足CP(P 是分布式的基础, 不能实现P就谈不上分布式系统了) 基于本地消息表常用的分布式事务解决方案 场景 用户支付完成后,会调

wanmei002的博客 520

c语言版数据结构课程设计 学生成绩管理系统

此学生成绩管理系统完成15项功能,是我经过很多次的修改得到的。花费时间不短,功能齐全,主要完成了:输入,输出,插入,修改,删除,查询,读取文件,写入文件,复制文件,建立索引,显示各种情况下的信息,追加学生信息等等功能。一共15项。   代码如下: // shujujiegou.cpp : 定义控制台应用程序的入口点。///**本程序采用数组链表形式,原因:数组查询速度快,数组也能实现动态存储

Java 1万+

基于本地消息表实现分布式事务(最终一致性)

传统单体架构下,所有的功能模块都在一个应用下,所有的代码和业务逻辑都在同一个应用下实现,所以保证数据的一致性就很简单,保证相关操作都在同一个本地事务下就可以了。但是在微服务架构下,将一个应用拆分成了多个独立的服务,每个服务都能有自己的数据库,服务间通信都是通过远程调用实现,实现一个功能可能需要由几个不同的服务来共同实现。这就会带来一个问题,不同的服务之间无法做到使用同一个事务,这就无法保证数据的一致性了。

2373

Spring Boot 3.5.4 + LangChain4j实战:用Milvus搭建企业级RAG问答系统(附阿里百炼API配置)

本文详细介绍了如何利用Spring Boot 3.5.4、LangChain4j与Milvus构建企业级RAG问答系统。内容涵盖从架构设计、阿里百炼API安全配置、Milvus部署优化,到RAG检索、会话管理等核心实现,并提供了生产级API设计、监控集成及性能优化等实战经验,旨在帮助开发者打造高可用、可维护的Java AI应用。

weixin_29054399的博客 610

Cesium创建无人机视锥,同步视锥与鹰眼地图视角,实现视锥键盘控制。解决视锥初始化位置不准确问题等

本文描述了一个基于Cesium的3D视锥体可视化系统开发过程。系统实现了主视图与鹰眼视图的双屏联动,支持通过键盘控制视锥体的空间移动(WASD前后左右,Q/E旋转,C/Z升降),并实时同步更新两个视图。关键技术包括:1)基于主视图Scene创建Camera实现视锥体精确绘制;2)通过PerspectiveFrustum设置视锥参数;3)建立双视图的相机位置及视角同步机制。目前暂未实现视锥体far/near边界在鹰眼视图中的可视化,该系统可应用于无人机视角监控等三维场景交互需求。

coder_bin的博客 1593

如何通过本地消息表实现分布式事务?

单独创建一个后台线程或定时任务,定时扫描本地消息表中状态为待发送的消息,并将这些消息发送到消息队列。通过本地消息表(也称为可靠消息表)实现分布式事务是一种常见的做法,用于保证在分布式环境中消息的可靠传递和事务的一致性。如果本地事务失败,回滚本地事务和消息表的记录。在数据库中创建一个本地消息表,用于存储待发送的消息以及消息的发送状态和相关信息。• 生产方和消费方定时扫描本地消息表,把还没处理完成的消息或者失败的消息再发送一遍。:在业务逻辑中,当需要发送消息时,首先将消息插入到本地消息表中,设置状态为待发送。

半亩方塘立身 3850

PyTorch实战(14)——图注意力网络(Graph Attention Network,GAT)

本节介绍了图注意力网络 (Graph Attention Network, GAT) 在节点分类任务中的应用。相比图卷积网络 (GCN) 的平均聚合机制,GAT 通过引入注意力机制,能够为不同邻居节点分配差异化权重,从而更精准地捕捉图结构信息。实验表明,GAT 在 CiteSeer 数据集上的分类准确率达到 71.1%,较 GCN 提升 2.5 个百分点。可视化结果显示,GAT 学习到的节点表征具有更好的类别区分度。这验证了注意力机制在图数据建模中的有效性,为处理复杂图结构任务提供了更优解决方案。

盼小辉丶的博客 3608

android系统占空间大小,有时手机系统占用空间为什么比Windows还大?

先声明一点,并不是所有手机系统都比windows要大,而是存在部分的手机,系统固件占用比win10大。手机系统占用空间越来越多,为什么现在的手机系统动不动就超过10个G,甚至有些手机的系统固件达到了18个G以上。系统容量安卓系统并不是一直都这么大,在安卓2.3的时代,安卓原生态系统安装包仅有60MB的大小,装到手机里面,也仅仅是占用一百多兆的空间。而到了现在,系统安装包动辄2-3GB,甚至更大的有...

weixin_35677065的博客 1万+

Windows密码忘了怎么办?一分钟看懂Windows密码底层机制:无需重装系统也能无痕找回登录密码

忘记Windows开机密码,不一定非得重装系统!本文手把手教你通过提取NTLM Hash值实现“无痕找回密码”,无需PE、无需清除密码,对系统零修改 🛡️ 搭配mimikatz与在线解密平台,小白也能快速上手,了解Windows密码底层机制 🔐

XiaoqiangClub的博客 130

基于四旋翼模型的火箭型无人机视线角保持控制仿真设计

本文针对火箭型无人机的视线角保持控制问题展开研究。基于四旋翼动力学模型,通过改造设计了一种摄像头朝上安装的特殊无人机系统,用于追踪空中目标。文章详细推导了坐标系定义、运动学和动力学方程,重点分析了摄像头安装与视线几何关系,建立了目标运动模型和视线向量计算方法。通过解算期望姿态角,实现了使机体Z轴始终对准目标的控制目标。仿真结果表明,该系统能有效完成视线角保持任务,为空对空监视等应用场景提供了可行方案。~~~~~

huanghm88的专栏 143

eclipse经常高占用_手机系统占用空间越来越大,是谁的锅?

大家好,我是老思机。不知道大家有没有发现,不管是安卓系统还是 ios 系统,系统占用的空间好像越来越大,导致手机越来越卡,比如这样的。还有这样的。甚至 64G?失敬失敬,你才是大哥。明明 1 个多 G 的系统固件,瞬间变成 10 多个 G,压缩能力再强也不能吧,非逼我换个容量更大的手机咩。这一切的背后,究竟是说不清的秘密?还是道不完的无奈?请跟随老思机脚步,一起走进今天的老思机解密!安卓系统占用为...

weixin_36359107的博客 230

一种低照度目标检测新策略:IAT集成YOLOv8实现暗光与雾霾环境下的性能优化【附核心实战代码】

随着深度学习和计算机视觉的快速发展,目标检测模型在各个领域中的应用不断扩展,特别是在低照度环境下的视觉任务。YOLOv8作为当前最先进的目标检测模型之一,在高亮度和良好照明条件下表现出色,但在低照度环境下的性能存在一定的不足。为了解决这一问题,我们提出了一种轻量级的低照度图像增强网络(IAT)来改进YOLOv8的暗光检测能力。本篇文章将深入探讨这一创新改进,并附带代码实现,帮助大家更好地理解这一技术的应用和效果。

一键难忘的博客 3504

tomcat 占用的内存越来越大_手机系统占用内存越来越大,是谁的锅?

大家好,我是老思机。不知道大家有没有发现,不管是安卓系统还是 ios 系统,系统占用的空间好像越来越大,比如这样的。还有这样的。甚至 64G?失敬失敬,你才是大哥。明明 1 个多 G 的系统固件,瞬间变成 10 多个 G,压缩能力再强也不能这么骚吧,非逼我换个容量更大的手机咩。这一切的背后,究竟是人性的扭曲?还是道德的沦丧?请跟随老思机脚步,一起走进今天的老思机解密!安卓系统占用为什么...

weixin_39779530的博客 440

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

winserver 443端口被system占用_手机系统占用内存越来越大,是谁的锅?

大家好,我是老思机。不知道大家有没有发现,不管是安卓系统还是 ios 系统,系统占用的空间好像越来越大,比如这样的。还有这样的。甚至 64G?失敬失敬,你才是大哥。明明 1 个多 G 的系统固件,瞬间变成 10 多个 G,压缩能力再强也不能这么骚吧,非逼我换个容量更大的手机咩。这一切的背后,究竟是人性的扭曲?还是道德的沦丧?请跟随老思机脚步,一起走进今天的老思机解密!安卓系统占用为什么...

weixin_39720516的博客 349

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Linux磁盘空间被占满?清空回收站试试!

今天本来想训练一个模型的,但是奈何数据量非常大,还没全下载到本地就把我磁盘撑满了,经过一系列,但是仔细一查好像不是那么回事,记录一下解决过程。 首先看了下HDFS上的数据:hadoop fs -du -h 第一列表示该目录下每个文件及文件夹的大小 第二列表示该目录下每个文件及文件夹原文件和副本大小,所以第二列是第一列的三倍 我还以为占得那么多磁盘空间就是因为副本数太多,加起来总的文件太大,但是转念一想不对啊,这数据是存在集群上的,跟我本地有什么关系。 但是磁盘爆满是从HDFS上下载完数据之后的发生的,我

Alex 1698

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JAVA面试题分享五百六十三:如何通过本地消息表实现分布式事务

单独创建一个后台线程或定时任务,定时扫描本地消息表中状态为待发送的消息,并将这些消息发送到消息队列。通过本地消息表(也称为可靠消息表)实现分布式事务是一种常见的做法,用于保证在分布式环境中消息的可靠传递和事务的一致性。如果本地事务失败,回滚本地事务和消息表的记录。在数据库中创建一个本地消息表,用于存储待发送的消息以及消息的发送状态和相关信息。• 生产方和消费方定时扫描本地消息表,把还没处理完成的消息或者失败的消息再发送一遍。:在业务逻辑中,当需要发送消息时,首先将消息插入到本地消息表中,设置状态为待发送。

之乎者也·的博客 1367

分布式事务:BASE理论详细介绍及发展历史(Eric Brewer,Dan Pritchet)

ACID理论是传统关系型数据库设计的核心原则,它强调事务处理的四个关键特性:Atomic原子性、Consistency一致性、Isolation隔离性和Durability持久性,以确保数据在并发操作下的完整性和准确性。然而,在大规模分布式系统中,尤其是在需要高可用性和可扩展性的NoSQL数据库场景下,强一致性的追求可能会导致性能瓶颈和扩展难题。BASE理论应运而生,为解决上述问题提供了新的设计理念。

ycsdn10的博客 1858

深入理解Java消息中间件-事务性消息处理

"事务"这一术语来自数据库领域,其中一个事务包含一系列的操作,这些操作要么全部成功执行,要么全部失败。类似的,事务性消息处理涉及将消息的发送和接收作为一个原子操作,确保消息要么完整地被处理,要么完全不处理。

u011532237的博客 514

Java小案例-RocketMQ的11种消息类型,你知道几种?(事务消息)

RocketMQ事务消息的实现主要是先将消息存到这个中间Topic,有些资料会把这个消息称为半消息(half消息),这是因为这个消息不能被消费之后会执行本地的事务,提交本地事务的执行状态RocketMQ会根据事务的执行状态去判断commit或者是rollback消息,也就是是不是可以让消费者消费这条消息的意思在一些异常情况下,生产者无法及时正确提交事务执行状态RocketMQ会向生产者发送消息,让生产者去检查本地的事务,之后再提交事务状态。

专注IT技术免费指导以及想、项目分享 1274

Java高频面试之消息队列与分布式篇

消息队列的基本作用是提供可靠、高效、异步的消息通信机制,实现系统之间的解耦、异步处理、削峰填谷、数据分发和错误处理等功能。它在分布式系统、微服务架构和大规模应用中发挥着重要的作用。

Java领域优秀创作者 2860

【JAVA】Java项目实战—分布式微服务项目:分布式消息队列

通过以上示例,我们实现了一个简单的分布式消息队列。生产者将消息发送到RabbitMQ,消费者从队列中接收并处理消息。例如订单处理、用户通知、日志收集等。通过引入消息队列,系统的可扩展性和可靠性得到了显著提升。

thinking_chou的专栏 1490

分布式系统BASE理论

什么是BASE理论 eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。 BASE是指基本可用(Basically Avai...

派大星的技术人生 320

java事务_Java 事务详解[通俗易懂]

本文详细讲解了事务的概念及Hibernate事务处理机制。首先介绍了事务的ACID四大特性(原子性、一致性、隔离性、持久性),然后阐述了Hibernate中的Transaction接口及其绑定机制。针对分布式系统,文章对比了JTA分布式事务(强一致性)和最终一致性事务的适用场景,前者适用于多数据库操作,后者适合高并发场景。最后总结了不同事务模型的优缺点,帮助开发者根据实际业务需求选择合适的事务处理方案。

小二丶的博客 1840
上一篇: Java帝国之宫廷内斗
下一篇: 开源代码啃不动,不如先定个小目标
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值