一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

事务管理方法、装置、电子设备及存储介质与流程

2022-05-18 05:48:47 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,尤其涉及一种事务管理方法、装置、电子设备及存储介质。


背景技术:

2.相关技术中,客户端向云平台发送的一个写入数据服务请求可能会触发多个服务数据访问对象(dao,data access object)层分别执行数据库的写入操作,每个数据库写入操作是一个数据库本地事务,多个数据库本地事务构成了一个全局事务。在微服务架构下,如何保证全局事务的数据一致性成为亟待解决的技术问题。


技术实现要素:

3.为解决相关技术问题,本技术实施例提供一种事务管理方法、装置、电子设备及存储介质。
4.本技术实施例的技术方案是这样实现的:
5.本技术实施例提供了一种事务管理方法,应用于云平台,包括:
6.所述云平台的第一服务接收第一请求;所述第一请求用于请求执行第一全局事务;所述第一全局事务至少包含所述第一服务的第一本地事务和所述云平台的至少一个第二服务中每个第二服务的第二本地事务;
7.所述第一服务基于所述第一请求,执行所述第一本地事务,得到第一执行结果;
8.在所述第一执行结果表征所述第一本地事务处于第一状态的情况下,所述第一服务调用每个第二服务执行相应的第二本地事务,得到至少一个第二执行结果;所述第一状态表征相应对数据库的写入操作成功将数据写入数据库的缓存;
9.所述第一服务基于所述至少一个第二执行结果,对所述第一本地事务和至少一个第二本地事务进行状态管理,以使所述第一本地事务的状态和所述至少一个第二本地事务的状态一致。
10.上述方案中,每个本地事务对应一个数据库写入操作;所述数据库由相应服务进行维护;所述基于所述至少一个第二执行结果,对所述第一本地事务和至少一个第二本地事务进行状态管理,包括:
11.在所述至少一个第二执行结果中存在表征相应第二本地事务处于第二状态的第二执行结果的情况下,所述第一服务将所述第一本地事务回滚至第三状态,并调用每个第二服务将相应的第二本地事务回滚至所述第三状态;所述第二状态表征相应对数据库的写入操作未成功将数据写入数据库的缓存;所述第三状态表征未执行相应对数据库的写入操作。
12.上述方案中,每个本地事务对应一个数据库写入操作;所述数据库由相应服务进行维护;所述基于所述至少一个第二执行结果,对所述第一本地事务和至少一个第二本地事务进行状态管理,包括:
13.在所有第二执行结果均表征相应第二本地事务处于所述第一状态的情况下,所述第一服务将所述第一本地事务转换至第四状态,并调用每个第二服务将相应的第二本地事务转换至所述第四状态;所述第四状态表征相应对数据库的写入操作成功将写入数据库缓存的数据写入数据库的磁盘。
14.上述方案中,所述调用每个第二服务执行相应的第二本地事务,包括:
15.所述第一服务利用第一组件生成相应第二服务的调用请求,利用第二组件拦截所述调用请求,并在所述调用请求中添加第一标识,生成第二请求;所述第一标识表征所述第一全局事务;所述第二请求至少包含所述第一标识;
16.所述第一服务向相应第二服务发送所述第二请求;所述第二请求用于请求执行相应的第二本地事务;
17.所述第一服务接收相应第二服务针对所述第二请求返回的第二执行结果。
18.上述方案中,所述接收相应第二服务针对所述第二请求返回的第二执行结果,包括:
19.所述第一服务接收相应第二服务针对所述第二请求返回的响应信息,利用第三组件对所述响应信息进行解析,得到相应第二本地事务对应的第二执行结果。
20.上述方案中,得到相应第二本地事务对应的第二执行结果时,所述方法还包括:
21.所述第一服务利用所述第三组件对所述响应信息进行解析,得到相应第二本地事务对应的第一回调地址;
22.所述第一服务获取所述第一本地事务对应的第二回调地址,并基于至少一个第一回调地址和所述第二回调地址,对所述第一本地事务和至少一个第二本地事务进行状态管理。
23.上述方案中,每个本地事务对应一个数据库写入操作;所述数据库由相应服务进行维护;所述基于至少一个第一回调地址和所述第二回调地址,对所述第一本地事务和至少一个第二本地事务进行状态管理,包括:
24.所述第一服务利用所述第二回调地址,将所述第一本地事务回滚至第三状态;并利用所述至少一个第一回调地址,调用每个第二服务将相应的第二本地事务回滚至所述第三状态;所述第三状态表征未执行相应对数据库的写入操作;
25.或者,
26.所述第一服务利用所述第二回调地址,将所述第一本地事务转换至第四状态;并利用所述至少一个第一回调地址,调用每个第二服务将相应的第二本地事务转换至所述第四状态;所述第四状态表征相应对数据库的写入操作成功将写入数据库缓存的数据写入数据库的磁盘。
27.本技术实施例还提供了一种事务管理装置,设置在云平台上,包括:
28.接收单元,用于被所述云平台的第一服务利用后,接收第一请求;所述第一请求用于请求执行第一全局事务;所述第一全局事务至少包含所述第一服务的第一本地事务和所述云平台的至少一个第二服务中每个第二服务的第二本地事务;
29.第一处理单元,用于被所述第一服务利用后,基于所述第一请求,执行所述第一本地事务,得到第一执行结果;
30.第二处理单元,用于被所述第一服务利用后,在所述第一执行结果表征所述第一
本地事务处于第一状态的情况下,调用每个第二服务执行相应的第二本地事务,得到至少一个第二执行结果;所述第一状态表征相应对数据库的写入操作成功将数据写入数据库的缓存;
31.第三处理单元,用于被所述第一服务利用后,基于所述至少一个第二执行结果,对所述第一本地事务和至少一个第二本地事务进行状态管理,以使所述第一本地事务的状态和所述至少一个第二本地事务的状态一致。
32.本技术实施例还提供了一种电子设备,包括:处理器和用于存储能够在处理器上运行的计算机程序的存储器,其中,所述处理器用于运行所述计算机程序时,执行上述任一方法的步骤。
33.本技术实施例还提供了一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一方法的步骤。
34.本技术实施例提供的事务管理方法、装置、电子设备及存储介质,云平台的第一服务接收第一请求;所述第一请求用于请求执行第一全局事务;所述第一全局事务至少包含所述第一服务的第一本地事务和所述云平台的至少一个第二服务中每个第二服务的第二本地事务;所述第一服务基于所述第一请求,执行所述第一本地事务,得到第一执行结果;在所述第一执行结果表征所述第一本地事务处于第一状态的情况下,所述第一服务调用每个第二服务执行相应的第二本地事务,得到至少一个第二执行结果;所述第一状态表征相应对数据库的写入操作成功将数据写入数据库的缓存;所述第一服务基于所述至少一个第二执行结果,对所述第一本地事务和至少一个第二本地事务进行状态管理,以使所述第一本地事务的状态和所述至少一个第二本地事务的状态一致。本技术实施例的方案,第一服务根据第一本地事务的执行结果调用第二服务执行相应的第二本地事务,并根据第二本地事务的执行结果对所述第一本地事务和至少一个第二本地事务进行状态管理,以使所述第一本地事务的状态和所述至少一个第二本地事务的状态一致;如此,能够保证全局事务的数据一致性,从而能够提高微服务的可靠性,进而能够提升用户体验。
附图说明
35.图1为本技术实施例事务管理方法的流程示意图;
36.图2为本技术应用实施例分布式事务框架示意图;
37.图3为本技术应用实施例分布式事务框架的核心组件示意图;
38.图4为本技术应用实施例分布式事务框架的依赖模块示意图;
39.图5为本技术实施例事务管理装置的结构示意图;
40.图6为本技术实施例电子设备的结构示意图。
具体实施方式
41.下面结合附图及实施例对本技术再作进一步详细的描述。
42.本技术实施例提供一种事务管理方法,应用于云平台,如图1所示,该方法包括:
43.步骤101:所述云平台的第一服务接收第一请求;
44.这里,所述第一请求用于请求执行第一全局事务;所述第一全局事务至少包含所述第一服务的第一本地事务和所述云平台的至少一个第二服务中每个第二服务的第二本
地事务;
45.步骤102:所述第一服务基于所述第一请求,执行所述第一本地事务,得到第一执行结果;
46.步骤103:在所述第一执行结果表征所述第一本地事务处于第一状态的情况下,所述第一服务调用每个第二服务执行相应的第二本地事务,得到至少一个第二执行结果;
47.这里,所述第一状态表征相应对数据库的写入操作成功将数据写入数据库的缓存;
48.步骤104:所述第一服务基于所述至少一个第二执行结果,对所述第一本地事务和至少一个第二本地事务进行状态管理,以使所述第一本地事务的状态和所述至少一个第二本地事务的状态一致。
49.其中,每个本地事务对应一个数据库写入操作;所述数据库由相应服务进行维护。
50.实际应用时,所述第一全局事务还可以包含其他全局事务,即实现全局事务的嵌套。而针对其他全局事务,也可以基于与步骤101至步骤104相同的原理,使对应的本地事务的状态保持一致性,从而使其他全局事务的状态与所述第一本地事务的状态和所述至少一个第二本地事务的状态一致。
51.实际应用时,所述云平台可以基于spring框架实现;所述第一全局事务可以基于嵌入式java事务应用程序接口(jta,java transaction api)、saga、尝试-提交-取消(tcc,try-confirm-cancel)以及基于异步消息的base(basic availability,soft state,eventual consistency)事务等方法实现。
52.在步骤101中,实际应用时,所述第一服务可以接收客户端发送的所述第一请求;所述客户端可以基于前端页面实现。
53.在步骤102中,实际应用时,所述执行所述第一本地事务,可以理解为执行所述第一本地事务对应的数据库写入操作;相应地,所述第一执行结果可以表征所述第一本地事务所处的状态,即所述第一本地事务对应的数据库写入操作的执行状态。
54.具体地,所述第一执行结果可以表征所述第一本地事务处于以下状态之一:
55.第一状态,表征相应对数据库的写入操作成功将数据写入数据库的缓存;
56.第二状态,表征相应对数据库的写入操作未成功将数据写入数据库的缓存。
57.实际应用时,在所述第一执行结果表征所述第一本地事务处于所述第二状态的情况下,所述第一服务不需要调用每个第二服务执行相应的第二本地事务,换句话说,全部第二本地事务均处于表征未执行相应对数据库的写入操作的第三状态。此时,为了使所述第一本地事务的状态和所述至少一个第二本地事务的状态一致,所述第一服务需要将所述第一本地事务回滚至所述第三状态。
58.在步骤103中,实际应用时,为了使所述第一本地事务的状态和所述至少一个第二本地事务的状态一致,只有在所述第一执行结果表征所述第一本地事务处于所述第一状态的情况下,所述第一服务才需要调用每个第二服务执行相应的第二本地事务。这里,所述执行相应的第二本地事务,可以理解为执行相应第二本地事务对应的数据库写入操作;相应地,所述第二执行结果可以表征相应第二本地事务所处的状态,即相应第二本地事务对应的数据库写入操作的执行状态。
59.在一实施例中,所述调用每个第二服务执行相应的第二本地事务,可以包括:
60.所述第一服务利用第一组件生成相应第二服务的调用请求,利用第二组件拦截所述调用请求,并在所述调用请求中添加第一标识,生成第二请求;所述第一标识表征所述第一全局事务;所述第二请求至少包含所述第一标识;
61.所述第一服务向相应第二服务发送所述第二请求;所述第二请求用于请求执行相应的第二本地事务;
62.所述第一服务接收相应第二服务针对所述第二请求返回的第二执行结果。
63.实际应用时,相应第二服务接收到所述第二请求后,可以利用第四组件对所述第二请求进行解析,得到所述第一标识,根据所述第一标识执行相应的第二本地事务,得到第二执行结果;并利用第五组件向所述第一服务返回所述第二执行结果。
64.在一实施例中,所述接收相应第二服务针对所述第二请求返回的第二执行结果,可以包括:
65.所述第一服务接收相应第二服务针对所述第二请求返回的响应信息,利用第三组件对所述响应信息进行解析,得到相应第二本地事务对应的第二执行结果。
66.实际应用时,所述第二服务利用第五组件向所述第一服务返回所述第二执行结果,可以包括:所述第二服务利用所述第五组件在所述响应信息中添加所述第二执行结果。
67.实际应用时,在预定时间(具体可以根据需求设置)内接收到相应第二服务针对所述第二请求返回的响应信息的情况下,所述第二执行结果可以表征相应第二本地事务处于所述第一状态或所述第二状态。在预定时间内未接收到相应第二服务针对所述第二请求返回的响应信息的情况下,所述第一服务可以直接确定相应第二服务对应的第二执行结果表征相应第二本地事务处于所述第二状态,换句话说,所述第一服务可以直接生成相应的第二执行结果。
68.实际应用时,所述第二服务利用所述第五组件在所述响应信息中添加所述第二执行结果时,还可以添加相应第二本地事务对应的第一回调地址。相应地,所述第一服务利用所述第三组件对所述响应信息进行解析时,还可以得到相应第二本地事务对应的第一回调地址,并基于所述第一回调地址对相应第二本地事务进行状态管理。
69.基于此,在一实施例中,得到相应第二本地事务对应的第二执行结果时,所述方法还可以包括:
70.所述第一服务利用所述第三组件对所述响应信息进行解析,得到相应第二本地事务对应的第一回调地址;
71.所述第一服务获取所述第一本地事务对应的第二回调地址,并基于至少一个第一回调地址和所述第二回调地址,对所述第一本地事务和至少一个第二本地事务进行状态管理。
72.在步骤104中,实际应用时,所述使所述第一本地事务的状态和所述至少一个第二本地事务的状态一致,可以理解为使所述第一本地事务和每个第二本地事务对应的数据库写入操作全部执行成功或全部回滚。这里,数据库写入操作执行成功是指将写入数据库缓存的数据写入数据库的磁盘,即实现数据持久化;数据库写入操作回滚是指回滚到未执行数据库写入操作的状态,即所述第三状态。
73.基于此,在一实施例中,所述基于所述至少一个第二执行结果,对所述第一本地事务和至少一个第二本地事务进行状态管理,可以包括:
74.在所述至少一个第二执行结果中存在表征相应第二本地事务处于第二状态的第二执行结果的情况下,所述第一服务将所述第一本地事务回滚至第三状态,并调用每个第二服务将相应的第二本地事务回滚至所述第三状态;
75.或者,
76.在所有第二执行结果均表征相应第二本地事务处于所述第一状态的情况下,所述第一服务将所述第一本地事务转换至第四状态,并调用每个第二服务将相应的第二本地事务转换至所述第四状态;所述第四状态表征相应对数据库的写入操作成功将写入数据库缓存的数据写入数据库的磁盘。
77.具体地,所述第一服务可以基于所述至少一个第一回调地址和所述第二回调地址,对所述第一本地事务和至少一个第二本地事务进行状态管理。换句话说,所述第一服务可以利用所述第二回调地址,将所述第一本地事务回滚至第三状态,或者将所述第一本地事务转换至第四状态。同时,所述第一服务可以利用所述至少一个第一回调地址,调用每个第二服务将相应的第二本地事务回滚至所述第三状态,或者调用每个第二服务将相应的第二本地事务转换至所述第四状态。
78.基于此,在一实施例中,所述基于至少一个第一回调地址和所述第二回调地址,对所述第一本地事务和至少一个第二本地事务进行状态管理,可以包括:
79.所述第一服务利用所述第二回调地址,将所述第一本地事务回滚至第三状态;并利用所述至少一个第一回调地址,调用每个第二服务将相应的第二本地事务回滚至所述第三状态;所述第三状态表征未执行相应对数据库的写入操作;
80.或者,
81.所述第一服务利用所述第二回调地址,将所述第一本地事务转换至第四状态;并利用所述至少一个第一回调地址,调用每个第二服务将相应的第二本地事务转换至所述第四状态;所述第四状态表征相应对数据库的写入操作成功将写入数据库缓存的数据写入数据库的磁盘。
82.本技术实施例提供的事务管理方法,云平台的第一服务接收第一请求;所述第一请求用于请求执行第一全局事务;所述第一全局事务至少包含所述第一服务的第一本地事务和所述云平台的至少一个第二服务中每个第二服务的第二本地事务;所述第一服务基于所述第一请求,执行所述第一本地事务,得到第一执行结果;在所述第一执行结果表征所述第一本地事务处于第一状态的情况下,所述第一服务调用每个第二服务执行相应的第二本地事务,得到至少一个第二执行结果;所述第一状态表征相应对数据库的写入操作成功将数据写入数据库的缓存;所述第一服务基于所述至少一个第二执行结果,对所述第一本地事务和至少一个第二本地事务进行状态管理,以使所述第一本地事务的状态和所述至少一个第二本地事务的状态一致。本技术实施例的方案,第一服务根据第一本地事务的执行结果调用第二服务执行相应的第二本地事务,并根据第二本地事务的执行结果对所述第一本地事务和至少一个第二本地事务进行状态管理,以使所述第一本地事务的状态和所述至少一个第二本地事务的状态一致;如此,能够保证全局事务的数据一致性,从而能够提高微服务的可靠性,进而能够提升用户体验。
83.下面结合应用实施例对本技术再作进一步详细的描述。
84.在本应用实施例中,客户端调用云平台的表述性状态转移(rest,
representational state transfer)服务1(即上述第一服务,后续描述中将rest服务1简称为服务1)的方法1(即上述第一本地事务),服务1的方法1利用openfeign中的feignclient组件(即上述第一组件)调用rest服务2(即上述第二服务,后续描述中将rest服务2简称为服务2)的方法2(即上述第二本地事务),方法1和方法2执行成功时分别需要向对应的数据库写入数据。这里,方法1和方法2形成了分布式事务的执行场景,即为了保证全局事务的数据一致性,需要保证方法1和方法2全部成功写入数据或者全部回滚,不允许写入数据部分成功的情况出现。示例性地,针对员工入职场景,客户端可以是员工管理系统;服务1可以是员工基本信息服务;服务2可以是社保系统服务;方法1可以用于添加员工基本信息;方法2可以用于添加员工社保信息。
85.具体地,如图2所示,方法1和方法2的执行流程可以包括以下步骤:
86.步骤201:客户端访问服务1的方法1时,服务1的spring事务框架启动jta事务管理器(jtatransactionmanager,可以简称为tm),创建全局事务java对象(compositetransaction)和本地事务java对象(jta transaction);之后执行步骤202;
87.步骤202:服务1的spring事务框架从xa数据源(xadatasource)中获取xa连接对象(xaconnection);之后执行步骤203;
88.步骤203:服务1的spring事务框架基于xaconnection获取表示xa接口的java对象(xaresource);之后执行步骤204;
89.步骤204:服务1的spring事务框架调用jtatransaction.enlistresource(xaresource),在该方法内部调用xaresource.start方法,xaresource.start方法通过执行xa start《xid》sql语句,将数据库连接置为激活(active)状态;之后执行步骤205;
90.步骤205:服务1的spring事务框架通过rest控制器(rest controller)执行方法1;之后执行步骤206;
91.步骤206:服务1的spring事务框架调用jtatransaction.delistresource(xaresource),该方法调用xaresource.end方法,xaresource.end方法通过执行xa end《xid》sql语句,将数据库连接置为空闲(idle)状态;之后执行步骤207;
92.步骤207:服务1的spring事务框架调用jtatransactionmanager.commit,该方法调用compositetransaction.commit,compositetransaction.commit调用本地和远程事务分支的准备(prepare)和保证(commit)方法,全局事务执行完毕。
93.其中,步骤205的具体执行过程可以包括以下步骤:
94.步骤2051:rest controller执行方法1时,在数据库连接(xaconnection)上执行准备好的声明(preparedstatement),即执行数据库写入操作;之后执行步骤2052;
95.步骤2052:服务1利用feignclient(即上述第一组件)调用服务2的方法2。
96.其中,步骤2052的具体执行过程可以包括以下步骤:
97.步骤2052-1:服务1的spring事务框架利用请求拦截器(requestinterceptor)实现事务感知请求拦截器(transactionalawarerequestinterceptor)调用compositetransaction.registersynchronization登记需要通过超文本传输协议请求头(httprequestheader)的传播(propagation)信息来传播事务上下文信息(即上述第一标识);之后执行步骤2052-2;
98.步骤2052-2:服务2的spring事务框架利用小服务程序过滤器(servlet filter)
实现事务感知rest容器过滤器(transactionawarerestcontainerfilter)从httprequestheader的propagation信息中提取事务上下文信息,在服务2上启动jtatransactionmanager,创建compositetransaction和jta transaction;之后执行步骤2052-3;
99.步骤2052-3:调用服务2的方法2;之后执行步骤2052-4;
100.步骤2052-4:服务2的spring事务框架获取xaconnection;之后执行步骤2052-5;
101.步骤2052-5:服务2的spring事务框架获取xaresource;之后执行步骤2052-6;
102.步骤2052-6:服务2的spring事务框架调用jtatransaction.enlistresource(xaresource),在该方法内部调用xaresource.start方法,xaresource.start方法通过执行xa start《xid》sql语句,将数据库连接置为active状态;之后执行步骤2052-7;
103.步骤2052-7:服务2的spring事务框架通过rest controller执行方法2,执行方法2时,rest controller在数据库连接(xaconnection)上执行preparedstatement,即执行数据库写入操作;之后执行步骤2052-8;
104.步骤2052-8:服务2的spring事务框架调用jtatransaction.delistresource(xaresource),该方法调用xaresource.end方法,xaresource.end方法通过执行xa end《xid》sql语句,将数据库连接置为idle状态;之后执行步骤2052-9;
105.步骤2052-9:服务2的spring事务框架调用响应控制器(responsebody controlleradvice)实现事务感知响应建议(transactionalawareresponseadvice)在超文本传输协议响应头(httpresponseheader)的范围(extent)信息中设置事务执行结果(即上述第二执行结果)和执行prepare/commit/取消(cancel)方法的回调地址(即上述第一回调地址)。服务1的解码器(decoder)从httpresponseheader中提取extent信息(getextent)并存储到服务1的compositetransaction中(addextent)。
106.在步骤207中,compositetransaction.commit分别通过本地的回调地址(即上述第二回调地址)和extent信息中的回调地址,调用本地和远程事务分支的准备(prepare)和保证(commit)方法,将写入数据库缓存的数据写入数据库的磁盘,实现数据持久化,使得全局事务的各事务分支(即各本地事务)保持数据一致性。
107.在本应用实施例中,如图3所示,服务1是服务2的服务消费者,服务2是服务1的服务提供者;云平台的事务框架核心主要包含以下4个组件类:
108.transactionalawarerequestinterceptor(相当于图2所示的requestinterceptor,即上述第二组件),用于处理服务消费者的feignclient发送的http请求,在请求头部通过propagation信息携带传播的事务上下文信息;
109.transactionalawareoptionaldecoder(相当于图2所示的decoder,即上述第三组件),用于处理向服务消费者的feignclient返回的http响应,提取响应头的extent信息,从而获取服务提供者的事务执行结果和回调地址;
110.transactionawarerestcontainerfilter(相当于图2所示的servlet filter,即上述第四组件),用于处理服务提供者接收的http请求,从请求头的propagation中提取传播的事务上下文信息,并在本地启动相应事务;
111.服务2的本地事务执行完毕后,transactionalawareresponseadvice(相当于图2所示的responsebody controlleradvice,即上述第五组件)在向服务消费者的
feignclient返回的http响应头中增加extent信息,以标记事务执行的阶段性状态(即上述第一状态或第二状态)。
112.实际应用时,如图4所示,可以将本应用实施例中的组件(即图2或图3所示的组件)封装为java归档(jar)文件spring boot starter。spring boot starter还可以包含spring boot autoconfigure模块、jta事务实现、servlet实现等依赖模块。其中,spring boot autoconfigure模块可以包含用于配置服务消费者的spring boot配置类(transactionalawarefeignclientconfig)和用于配置服务提供者的spring boot配置类(transactionalawarerestcontainerconfig),考虑到应用服务通常兼具服务消费者和服务提供者两个角色,因此应用服务需要引入这两个配置类进行配置。这样,应用服务只需要引入spring boot starter,就可以实现基于spring cloud openfeign发起服务调用的分布式事务。
113.本应用实施例提供的方案,具有以下优点:
114.1)利用简化的信息技术(it)架构解决了利用spring cloud openfeign发起服务调用的分布式事务问题,不需要在应用系统外配置一个独立的全局事务协调服务,即可保证全局事务的数据一致性;从而能够降低网络拓扑复杂度,并降低系统维护的难度;同时,提高微服务系统的可靠性,提升用户体验。
115.2)在产品化实现中,应用服务只需要引入封装的jar包spring boot starter,即可实现基于spring cloud openfeign发起服务调用的分布式事务,并保证全局事务的数据一致性;由于封装合理,本应用实施例的分布式事务框架可以基于非jta事务基础实现来构建和运行。这里,封装合理是指:spring boot starter提供的编程接口可以屏蔽具体的本地事务实现方法,因此,当本应用实施例中的本地事务实现方法jta被替换为其他本地事务实现方法比如saga、tcc时,不需要对应用程序进行调整。
116.为了实现本技术实施例的方法,本技术实施例还提供了一种事务管理装置,设置在云平台上,如图5所示,该装置包括:
117.接收单元501,用于被所述云平台的第一服务利用后,接收第一请求;所述第一请求用于请求执行第一全局事务;所述第一全局事务至少包含所述第一服务的第一本地事务和所述云平台的至少一个第二服务中每个第二服务的第二本地事务;
118.第一处理单元502,用于被所述第一服务利用后,基于所述第一请求,执行所述第一本地事务,得到第一执行结果;
119.第二处理单元503,用于被所述第一服务利用后,在所述第一执行结果表征所述第一本地事务处于第一状态的情况下,调用每个第二服务执行相应的第二本地事务,得到至少一个第二执行结果;所述第一状态表征相应对数据库的写入操作成功将数据写入数据库的缓存;
120.第三处理单元504,用于被所述第一服务利用后,基于所述至少一个第二执行结果,对所述第一本地事务和至少一个第二本地事务进行状态管理,以使所述第一本地事务的状态和所述至少一个第二本地事务的状态一致。
121.其中,在一实施例中,每个本地事务对应一个数据库写入操作;所述数据库由相应服务进行维护;所述第三处理单元504,具体用于:
122.在所述至少一个第二执行结果中存在表征相应第二本地事务处于第二状态的第二执行结果的情况下,被所述第一服务利用后,将所述第一本地事务回滚至第三状态,并调
用每个第二服务将相应的第二本地事务回滚至所述第三状态;所述第二状态表征相应对数据库的写入操作未成功将数据写入数据库的缓存;所述第三状态表征未执行相应对数据库的写入操作。
123.在一实施例中,所述第三处理单元504,具体用于:
124.在所有第二执行结果均表征相应第二本地事务处于所述第一状态的情况下,被所述第一服务利用后,将所述第一本地事务转换至第四状态,并调用每个第二服务将相应的第二本地事务转换至所述第四状态;所述第四状态表征相应对数据库的写入操作成功将写入数据库缓存的数据写入数据库的磁盘。
125.在一实施例中,所述第二处理单元503,具体用于:
126.被所述第一服务利用后,利用第一组件生成相应第二服务的调用请求,利用第二组件拦截所述调用请求,并在所述调用请求中添加第一标识,生成第二请求;所述第一标识表征所述第一全局事务;所述第二请求至少包含所述第一标识;
127.向相应第二服务发送所述第二请求;所述第二请求用于请求执行相应的第二本地事务;
128.接收相应第二服务针对所述第二请求返回的第二执行结果。
129.在一实施例中,所述第二处理单元503,还用于:
130.被所述第一服务利用后,接收相应第二服务针对所述第二请求返回的响应信息,利用第三组件对所述响应信息进行解析,得到相应第二本地事务对应的第二执行结果。
131.在一实施例中,得到相应第二本地事务对应的第二执行结果时,所述第二处理单元503,还用于:
132.被所述第一服务利用后,利用所述第三组件对所述响应信息进行解析,得到相应第二本地事务对应的第一回调地址;
133.相应地,所述第三处理单元504,还用于:
134.被所述第一服务利用后,获取所述第一本地事务对应的第二回调地址,并基于至少一个第一回调地址和所述第二回调地址,对所述第一本地事务和至少一个第二本地事务进行状态管理。
135.在一实施例中,所述第三处理单元504,具体用于:
136.被所述第一服务利用后,利用所述第二回调地址,将所述第一本地事务回滚至第三状态;并利用所述至少一个第一回调地址,调用每个第二服务将相应的第二本地事务回滚至所述第三状态;所述第三状态表征未执行相应对数据库的写入操作;
137.或者,
138.被所述第一服务利用后,利用所述第二回调地址,将所述第一本地事务转换至第四状态;并利用所述至少一个第一回调地址,调用每个第二服务将相应的第二本地事务转换至所述第四状态;所述第四状态表征相应对数据库的写入操作成功将写入数据库缓存的数据写入数据库的磁盘。
139.实际应用时,所述接收单元501、所述第一处理单元502、所述第二处理单元503和所述第三处理单元504可由事务管理装置中的处理器结合通信接口实现。
140.需要说明的是:上述实施例提供的事务管理装置在管理事务时,仅以上述各程序模块的划分进行举例说明,实际应用时,可以根据需要而将上述处理分配由不同的程序模
块完成,即将装置的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分处理。另外,上述实施例提供的事务管理装置与事务管理方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
141.基于上述程序模块的硬件实现,且为了实现本技术实施例的方法,本技术实施例还提供了一种电子设备,用于支持云平台的第一服务,如图6所示,该电子设备600包括:
142.通信接口601,能够与其他电子设备进行信息交互;
143.处理器602,与所述通信接口601连接,以实现与其他电子设备进行信息交互,用于运行计算机程序时,执行上述一个或多个技术方案提供的方法;
144.存储器603,存储能够在所述处理器602上运行的计算机程序。
145.具体地,所述处理器602,用于:
146.接收第一请求;所述第一请求用于请求执行第一全局事务;所述第一全局事务至少包含所述第一服务的第一本地事务和所述云平台的至少一个第二服务中每个第二服务的第二本地事务;
147.基于所述第一请求,执行所述第一本地事务,得到第一执行结果;
148.在所述第一执行结果表征所述第一本地事务处于第一状态的情况下,调用每个第二服务执行相应的第二本地事务,得到至少一个第二执行结果;所述第一状态表征相应对数据库的写入操作成功将数据写入数据库的缓存;
149.基于所述至少一个第二执行结果,对所述第一本地事务和至少一个第二本地事务进行状态管理,以使所述第一本地事务的状态和所述至少一个第二本地事务的状态一致。
150.其中,在一实施例中,每个本地事务对应一个数据库写入操作;所述数据库由相应服务进行维护;所述处理器602,还用于:
151.在所述至少一个第二执行结果中存在表征相应第二本地事务处于第二状态的第二执行结果的情况下,将所述第一本地事务回滚至第三状态,并调用每个第二服务将相应的第二本地事务回滚至所述第三状态;所述第二状态表征相应对数据库的写入操作未成功将数据写入数据库的缓存;所述第三状态表征未执行相应对数据库的写入操作。
152.在一实施例中,所述处理器602,还用于:
153.在所有第二执行结果均表征相应第二本地事务处于所述第一状态的情况下,将所述第一本地事务转换至第四状态,并调用每个第二服务将相应的第二本地事务转换至所述第四状态;所述第四状态表征相应对数据库的写入操作成功将写入数据库缓存的数据写入数据库的磁盘。
154.在一实施例中,所述处理器602,还用于:
155.利用第一组件生成相应第二服务的调用请求,利用第二组件拦截所述调用请求,并在所述调用请求中添加第一标识,生成第二请求;所述第一标识表征所述第一全局事务;所述第二请求至少包含所述第一标识;
156.向相应第二服务发送所述第二请求;所述第二请求用于请求执行相应的第二本地事务;
157.接收相应第二服务针对所述第二请求返回的第二执行结果。
158.在一实施例中,所述处理器602,还用于:
159.接收相应第二服务针对所述第二请求返回的响应信息,利用第三组件对所述响应
信息进行解析,得到相应第二本地事务对应的第二执行结果。
160.在一实施例中,得到相应第二本地事务对应的第二执行结果时,所述处理器602,还用于:
161.利用所述第三组件对所述响应信息进行解析,得到相应第二本地事务对应的第一回调地址;
162.获取所述第一本地事务对应的第二回调地址,并基于至少一个第一回调地址和所述第二回调地址,对所述第一本地事务和至少一个第二本地事务进行状态管理。
163.在一实施例中,所述处理器602,还用于:
164.利用所述第二回调地址,将所述第一本地事务回滚至第三状态;并利用所述至少一个第一回调地址,调用每个第二服务将相应的第二本地事务回滚至所述第三状态;所述第三状态表征未执行相应对数据库的写入操作;
165.或者,
166.利用所述第二回调地址,将所述第一本地事务转换至第四状态;并利用所述至少一个第一回调地址,调用每个第二服务将相应的第二本地事务转换至所述第四状态;所述第四状态表征相应对数据库的写入操作成功将写入数据库缓存的数据写入数据库的磁盘。
167.需要说明的是:所述处理器602具体执行上述操作的过程详见方法实施例,这里不再赘述。
168.当然,实际应用时,电子设备600中的各个组件通过总线系统604耦合在一起。可理解,总线系统604用于实现这些组件之间的连接通信。总线系统604除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图6中将各种总线都标为总线系统604。
169.本技术实施例中的存储器603用于存储各种类型的数据以支持电子设备600的操作。这些数据的示例包括:用于在电子设备600上操作的任何计算机程序。
170.上述本技术实施例揭示的方法可以应用于处理器602中,或者由处理器602实现。处理器602可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器602中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器602可以是通用处理器、数字信号处理器(dsp,digital signal processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器602可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本技术实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器603,处理器602读取存储器603中的信息,结合其硬件完成前述方法的步骤。
171.在示例性实施例中,电子设备600可以被一个或多个应用专用集成电路(asic,application specific integrated circuit)、dsp、可编程逻辑器件(pld,programmable logic device)、复杂可编程逻辑器件(cpld,complex programmable logic device)、现场可编程门阵列(fpga,field-programmable gate array)、通用处理器、控制器、微控制器(mcu,micro controller unit)、微处理器(microprocessor)、或者其他电子元件实现,用于执行前述方法。
172.可以理解,本技术实施例的存储器603可以是易失性存储器或者非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(rom,read only memory)、可编程只读存储器(prom,programmable read-only memory)、可擦除可编程只读存储器(eprom,erasable programmable read-only memory)、电可擦除可编程只读存储器(eeprom,electrically erasable programmable read-only memory)、磁性随机存取存储器(fram,ferromagnetic random access memory)、快闪存储器(flash memory)、磁表面存储器、光盘、或只读光盘(cd-rom,compact disc read-only memory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(ram,random access memory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(sram,static random access memory)、同步静态随机存取存储器(ssram,synchronous static random access memory)、动态随机存取存储器(dram,dynamic random access memory)、同步动态随机存取存储器(sdram,synchronous dynamic random access memory)、双倍数据速率同步动态随机存取存储器(ddrsdram,double data rate synchronous dynamic random access memory)、增强型同步动态随机存取存储器(esdram,enhanced synchronous dynamic random access memory)、同步连接动态随机存取存储器(sldram,synclink dynamic random access memory)、直接内存总线随机存取存储器(drram,direct rambus random access memory)。本技术实施例描述的存储器旨在包括但不限于这些和任意其他适合类型的存储器。
173.在示例性实施例中,本技术实施例还提供了一种存储介质,即计算机存储介质,具体为计算机可读存储介质,例如包括存储计算机程序的存储器603,上述计算机程序可由电子设备600的处理器602执行,以完成前述方法所述步骤。计算机可读存储介质可以是fram、rom、prom、eprom、eeprom、flash memory、磁表面存储器、光盘、或cd-rom等存储器。
174.需要说明的是:“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
175.另外,本技术实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。
176.以上所述,仅为本技术的较佳实施例而已,并非用于限定本技术的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献