一种基于事务消息及反查实现分布式事务的方法及系统技术方案

技术编号:31237410 阅读:21 留言:0更新日期:2021-12-08 10:22
本发明专利技术提供了一种基于事务消息及反查实现分布式事务的方法,所述方法包括以下步骤:步骤S1、消息发送方给消息服务端发送一个半消息;步骤S2、半消息发送成功后,告知消息服务端的订单系统,订单系统开始执行半消息的本地事务;步骤S3、根据本地事务的执行结果决定将半消息提交或回滚事务消息;步骤S4、在半消息提交或回滚事务消息时发生网络异常,消息服务端没有收到提交半消息或回滚的请求,消息服务端会定期反查消息发送方对应的本地事务状态,根据反查结果决定提交或回滚本地事务;本发明专利技术能够利用事务消息保证分布性事务性,并通过增加事务反查机制来解决事务消息提交失败问题。事务反查机制来解决事务消息提交失败问题。事务反查机制来解决事务消息提交失败问题。

【技术实现步骤摘要】
一种基于事务消息及反查实现分布式事务的方法及系统


[0001]本专利技术涉及计算机
,特别是一种基于事务消息及反查实现分布式事务的方法及系统。

技术介绍

[0002]本方法是在订单系统中实施,在该系统中创建订单的过程中实际上执行了2个步骤的操作(如下图1):
[0003](1)在订单库中插入一条订单数据,创建订单;
[0004](2)发消息给消息队列,消息的内容就是刚刚创建的订单。
[0005]购物车系统订阅相应的主题,接收订单创建的消息,然后清理购物车,在购物车中删除订单中的商品。问题的关键点集中在订单系统,创建订单和发送消息这两个步骤要么都操作成功,要么都操作失败,不允许一个成功而另一个失败的情况出现。即有要有一个方案能够保证分布式事务的可靠性,常用的技术方案是分布式锁的机制,一定程度上面可以保障操作的原子性和一致性,但是牺牲了效率(性能),尤其在高并发的场景下,容易出现死锁等情况。

技术实现思路

[0006]为克服上述问题,本专利技术的目的是提供一种能够利用事务消息保证分布性事务性,并通过增加事务反查机制来解决事务消息提交失败问题的方法。
[0007]本专利技术采用以下方案实现:一种基于事务消息及反查实现分布式事务的方法,所述方法包括以下步骤:
[0008]步骤S1、消息发送方给消息服务端发送一个半消息;
[0009]步骤S2、半消息发送成功后,告知消息服务端的订单系统,订单系统开始执行半消息的本地事务;
[0010]步骤S3、根据本地事务的执行结果决定将半消息提交或回滚事务消息;
[0011]步骤S4、在半消息提交或回滚事务消息时发生网络异常,消息服务端没有收到提交半消息或回滚的请求,消息服务端会定期反查消息发送方对应的本地事务状态,根据反查结果决定提交或回滚本地事务。
[0012]进一步的,所述步骤S1进一步具体为:消息发送方给消息服务端发送一个半消息,所述半消息为消息的完整内容,且对于消费者不可见。
[0013]进一步的,所述步骤S2进一步具体为:半消息发送成功后,告知消息服务端的订单系统,订单系统开始执行本地事务,所述本地事务为业务性质的操作,如在订单库中创建一条订单记录,并提交订单库的数据库事务,所述数据库事务为连贯性的操作,业务发起,数据库执行。
[0014]进一步的,所述步骤S3进一步具体为:根据本地事务的执行结果决定将半消息提交或回滚事务消息,判断订单是否创建成功,是,则将事务消息提交至消息服务端,否,则回
滚事务消息。
[0015]进一步的,所述步骤S4进一步具体为:反查本地事务并不依赖消息发送方,消息服务端通过其他订单服务的节点数据来执行反查,确保本地事务的完整性。
[0016]本专利技术还提供了一种基于事务消息及反查实现分布式事务的系统,包括发送模块、告知模块、决定模块和反查模块,所述发送模块,即消息发送方给消息服务端发送一个半消息;所述告知模块,即半消息发送成功后,告知消息服务端的订单系统,订单系统开始执行半消息的本地事务;所述决定模块,即根据本地事务的执行结果决定将半消息提交或回滚事务消息;所述反查模块,即在半消息提交或回滚事务消息时发生网络异常,消息服务端没有收到提交半消息或回滚的请求,消息服务端会定期反查消息发送方对应的本地事务状态,根据反查结果决定提交或回滚本地事务。
[0017]进一步的,所述发送模块进一步具体为:消息发送方给消息服务端发送一个半消息,所述半消息为消息的完整内容,且对于消费者不可见。
[0018]进一步的,所述告知模块进一步具体为:半消息发送成功后,告知消息服务端的订单系统,订单系统开始执行本地事务,所述本地事务为业务性质的操作,如在订单库中创建一条订单记录,并提交订单库的数据库事务,所述数据库事务为连贯性的操作,业务发起,数据库执行。
[0019]进一步的,所述决定模块进一步具体为:根据本地事务的执行结果决定将半消息提交或回滚事务消息,判断订单是否创建成功,是,则将事务消息提交至消息服务端,否,则回滚事务消息。
[0020]进一步的,所述反查模块进一步具体为:反查本地事务并不依赖消息发送方,消息服务端通过其他订单服务的节点数据来执行反查,确保本地事务的完整性。
[0021]本专利技术的有益效果在于:本专利技术实现订单系统中分布式操作事务的一致性要求,同时通过事务反查的机制解决了事务消息提交失败的问题,即使是发送事务消息的那个订单服务节点宕机了,消息队列依然可以通过其他订单服务的节点来执行反查,确保事务的完整性;同时具备更好的性能指标。
附图说明
[0022]图1为现有技术流程示意图。
[0023]图2是本专利技术的方法流程示意图。
[0024]图3是本专利技术的系统原理框图。
具体实施方式
[0025]下面结合附图对本专利技术做进一步说明。
[0026]请参阅图2所示,本专利技术的一种基于事务消息及反查实现分布式事务的方法,所述方法包括以下步骤:
[0027]步骤S1、消息发送方给消息服务端发送一个半消息;
[0028]步骤S2、半消息发送成功后,告知消息服务端的订单系统,订单系统开始执行半消息的本地事务;
[0029]步骤S3、根据本地事务的执行结果决定将半消息提交或回滚事务消息;
[0030]步骤S4、在半消息提交或回滚事务消息时发生网络异常,消息服务端没有收到提交半消息或回滚的请求,消息服务端会定期反查消息发送方对应的本地事务状态,根据反查结果决定提交或回滚本地事务。
[0031]下面通过一具体实施例对本专利技术作进一步说明:
[0032]步骤1:消息发送方如订单系统消息模块客户端给消息服务端发送一个半消息(Half),这个半消息包含的内容是完整的消息内容,和普通消息的唯一区别是,在事务提交之前,对于消费者来说,这个消息是不可见的。订单系统消息模块客户端由客户端和服务端构成,一般会引入消息中间件,如RocketMQ等进行构建;订单系统生成的消息推送给消息模块,消息模块会实时告知接受结果。
[0033]步骤2:半消息发送成功后,告知订单系统,该系统开始执行本地事务,如在订单库中创建一条订单记录,并提交订单库的数据库事务。这边的本地事务就是特指业务性质的操作,如发起订单付款操作,跟下面提到的数据库事务是连贯性的操作,业务发起,数据库执行。如发起付款,就会触发“在订单库中创建一条订单记录”;因此本案例中数据库事务完成后会反馈本地事务结果,本地事务以数据库事务结果来给用户做反馈,如提示订单创建失败等。
[0034]数据库事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。比如本专利技术提到的“在订单库中创建一条订单记录”,这个简单的操作在订单系统中可能涉及账户余额的预扣款、日志的更新等一系列的数据库操作,那么必本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于事务消息及反查实现分布式事务的方法,其特征在于,所述方法包括以下步骤:步骤S1、消息发送方给消息服务端发送一个半消息;步骤S2、半消息发送成功后,告知消息服务端的订单系统,订单系统开始执行半消息的本地事务;步骤S3、根据本地事务的执行结果决定将半消息提交或回滚事务消息;步骤S4、在半消息提交或回滚事务消息时发生网络异常,消息服务端没有收到提交半消息或回滚的请求,消息服务端会定期反查消息发送方对应的本地事务状态,根据反查结果决定提交或回滚本地事务。2.根据权利要求1所述的一种基于事务消息及反查实现分布式事务的方法,其特征在于:所述步骤S1进一步具体为:消息发送方给消息服务端发送一个半消息,所述半消息为消息的完整内容,且对于消费者不可见。3.根据权利要求1所述的一种基于事务消息及反查实现分布式事务的方法,其特征在于:所述步骤S2进一步具体为:半消息发送成功后,告知消息服务端的订单系统,订单系统开始执行本地事务,所述本地事务为业务性质的操作,如在订单库中创建一条订单记录,并提交订单库的数据库事务,所述数据库事务为连贯性的操作,业务发起,数据库执行。4.根据权利要求1所述的一种基于事务消息及反查实现分布式事务的方法,其特征在于:所述步骤S3进一步具体为:根据本地事务的执行结果决定将半消息提交或回滚事务消息,判断订单是否创建成功,是,则将事务消息提交至消息服务端,否,则回滚事务消息。5.根据权利要求1所述的一种基于事务消息及反查实现分布式事务的方法,其特征在于:所述步骤S4进一步具体为:反查本地事务并不依赖消息发送方,消息服务端通过其他订单服务的节点数据来执行反查,确保本地事务的完整性。6.一种基于事务消息及反查实现分布式事...

【专利技术属性】
技术研发人员:刘德建陈宏展岳万恕郑彬
申请(专利权)人:福建天晴数码有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1