分布式事务的消息回查方法及其系统的制作方法

文档序号:10534852阅读:418来源:国知局
分布式事务的消息回查方法及其系统的制作方法
【专利摘要】本发明涉及事务处理技术,公开了一种分布式事务的消息回查方法及其系统。本发明中,业务系统在开启分布式事务后保存该分布式事务的标识和状态值的对应关系并向消息中心发送包括该分布式事务的标识的注册消息,则在收到来自上述消息中心的回查消息时,一个业务系统只需要配置一个回查接口,避免了分布式事务消息的多个回查接口的重复设置,并且该业务系统只需要根据该分布式事务的状态值来返回响应消息给上述消息中心,回查操作方便。此外,在本地事务中保存分布式事务的标识和状态值的对应关系不会受到分布式事务的影响。
【专利说明】
分布式事务的消息回查方法及其系统
技术领域
[0001]本发明涉及事务处理技术,特别涉及分布式事务的消息回查方法及其系统。
【背景技术】
[0002]分布式事务消息是将消息绑定在分布式事务中,保证事务与消息一致性的一种解决方案。广泛应用与大型业务后台系统中。消息回查是指消息发送端,在收到事务消息后,回查消息注册端,查看注册端的事务是否成功。如果注册端成功,则发送该消息;如果注册端失败,则抛弃该消息;如果回查异常,则继续回查,直到注册端反馈结果(成功/失败)。
[0003]每个分布式事务消息在回查时,都需要根据当前业务,判断业务走向是否成功,来决定回查是否成功。本发明的发明人发现,每个分布式事务消息都必须配置一个不同的消息回查接口。并且每个消息回查接口,都必须深入理解业务需求,是否成功的完成了业务处理。

【发明内容】

[0004]本发明的目的在于提供一种分布式事务的消息回查方法及其系统,避免了多个回查接口的设置,并且回查操作方便。
[0005]为解决上述技术问题,本发明的实施方式公开了一种分布式事务的消息回查方法,方法包括以下步骤:
[0006]业务系统在开启分布式事务后,在该业务系统中保存该分布式事务的标识和状态值的对应关系,其中状态值设为第一状态;
[0007]业务系统向消息中心发送注册消息,该注册消息中包括分布式事务的标识;
[0008]业务系统在分布式事务处理成功后,将对应关系中该分布式事务的状态值修改为第二状态;
[0009]业务系统收到来自消息中心的回查消息时,根据该回查消息中的分布式事务的标识查询对应关系,获得该分布式事务的状态值;
[0010]业务系统根据分布式事务的状态值向消息中心发送针对回查消息的响应消息。
[0011]本发明的实施方式还公开了一种分布式事务的消息回查系统,系统包括:
[0012]保存模块,用于在业务系统开启分布式事务后在该业务系统中保存该分布式事务的标识和状态值的对应关系,其中状态值设为第一状态;
[0013]发送模块,用于控制业务系统向消息中心发送注册消息,该注册消息中包括分布式事务的标识;
[0014]修改模块,用于控制业务系统在分布式事务处理成功后,将对应关系中该分布式事务的状态值修改为第二状态;
[0015]查询模块,用于控制业务系统在收到来自消息中心的回查消息时,根据该回查消息中的分布式事务的标识查询对应关系,获得该分布式事务的状态值;以及
[0016]响应模块,用于控制业务系统根据查询模块获取的分布式事务的状态值向消息中心发送针对回查消息的响应消息。
[0017]本发明实施方式与现有技术相比,主要区别及其效果在于:
[0018]在本发明中,业务系统在开启分布式事务后保存该分布式事务的标识和状态值的对应关系并向消息中心发送包括该分布式事务的标识的注册消息,则在收到来自上述消息中心的回查消息时,一个业务系统只需要配置一个回查接口,避免了分布式事务消息的多个回查接口的重复设置,并且该业务系统只需要根据该分布式事务的状态值来返回响应消息给上述消息中心,回查操作方便。
[0019]进一步地,在保存数据库记录时对该数据库记录加上读取锁,可以防止消息乱串,以使回查更准确。
[0020]进一步地,在本地事务中保存分布式事务的标识和状态值的对应关系不会受到分布式事务的影响。
【附图说明】
[0021]图1是本发明第一实施方式中一种分布式事务的消息回查方法的流程示意图;
[0022]图2是现有的分布式事务的消息回查方法的流程示意图;
[0023]图3是本发明第一实施方式中一种分布式事务的消息回查方法的流程示意图;
[0024]图4是本发明第二实施方式中一种分布式事务的消息回查系统的结构示意图。
【具体实施方式】
[0025]在以下的叙述中,为了使读者更好地理解本申请而提出了许多技术细节。但是,本领域的普通技术人员可以理解,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请各权利要求所要求保护的技术方案。
[0026]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明的实施方式作进一步地详细描述。
[0027]本发明第一实施方式涉及一种分布式事务的消息回查方法。图1是该分布式事务的消息回查方法的流程示意图。可以理解,分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。因此,分布式事务处理涉及多个分布在不同地方的数据库,对数据库的操作必须全部被提交或者回滚。只要任一数据库操作时失败,所有参与事务的数据库都需要回滚。
[0028]如图1所示,该方法包括以下步骤:
[0029]在步骤101中,业务系统在开启分布式事务后,在该业务系统中保存该分布式事务的标识和状态值的对应关系,其中状态值设为第一状态。优选地,业务系统在本地事务中保存该分布式事务的标识和状态值的对应关系。在本地事务中保存分布式事务的标识和状态值的对应关系不会受到分布式事务的影响。
[0030]可以理解,在本发明的各个实施方式中,上述业务系统可以包括单个服务器,也可以包括多个服务器。
[0031]此外,可以理解,在业务系统提交本地事务失败时,分布式事务回滚。
[0032]此后进入步骤102,业务系统向消息中心发送注册消息,该注册消息中包括分布式事务的标识。
[0033]此后进入步骤103,业务系统在分布式事务处理成功后,将对应关系中该分布式事务的状态值修改为第二状态。作为可选实施方式,若分布式事务未处理成功,维持该分布式事务的状态值为第一状态。
[0034]此后进入步骤104,业务系统收到来自消息中心的回查消息时,根据该回查消息中的分布式事务的标识查询对应关系,获得该分布式事务的状态值。
[0035]此后进入步骤105,业务系统根据分布式事务的状态值向消息中心发送针对回查消息的响应消息。
[0036]此后结束本流程。
[0037]可以理解,在向消息中心发送注册消息失败时或业务系统发生异常时或其他时候,分布式事务回滚。
[0038]在本实施方式的方法中,业务系统在开启分布式事务后保存该分布式事务的标识和状态值的对应关系并向消息中心发送包括该分布式事务的标识的注册消息,则在收到来自上述消息中心的回查消息时,一个业务系统只需要配置一个回查接口,避免了分布式事务消息的多个回查接口的重复设置,并且该业务系统只需要根据该分布式事务的状态值来返回响应消息给上述消息中心,回查操作方便。
[0039]优选地,分布式事务的标识和状态值的对应关系是业务系统的数据库记录。当然,在本发明的其他实施方式中,分布式事务的标识和状态值的对应关系也可以是数据表等其他形式。
[0040]则步骤1I中包括以下子步骤:
[0041]在业务系统的数据库中增加一条数据库记录,该数据库记录包括分布式事务的标识和状态值;
[0042]对该数据库记录加读取锁。
[0043]步骤104中包括以下子步骤:
[0044]根据回查消息中的分布式事务的标识查询业务系统的数据库,得到一条数据库记录;
[0045]尝试获取数据库记录的读取锁;
[0046]如果成功获取数据库记录的读取锁,则读取该数据库记录中的状态值;
[0047]如果未能成功获取数据库记录的读取锁,则业务系统向消息中心发送表示请求消息中心重新进行回查的消息。
[0048]在保存数据库记录时对该数据库记录加上读取锁,可以防止消息乱串,以使回查更准确。
[0049]此外,可以理解,在某些特定情况下,也可以不对数据库记录加锁。
[0050]作为可选实施方式,步骤105中包括以下子步骤:
[0051]如果分布式事务的状态值为第一状态,则业务系统向消息中心发送表示请求消息中心不再发送消息的消息;
[0052]如果分布式事务的状态值为第二状态,则业务系统向消息中心发送表示请求消息中心发送消息的消息。
[0053]可以理解,在本发明的各个实施方式中,状态值和各类消息可以根据需要进行设置。例如,第一状态可以仅为初始状态,若分布式事务处理成功,将状态值设为第二状态;若分布式事务处理不成功,将状态值设为第三状态等等。
[0054]如图2所示,当前大量采用的分布式事务消息回查方案,其步骤主要如下:
[0055]1.开始业务处理
[0056]2.开启分布式事务
[0057]3.通过事务,更新本地表操作(业务表)。
[0058]4.调用消息中心,注册消息(一般会将本地业务表的ID(标识)带上,做为后续回查的依据)。
[0059]4.1消息中心落地消息(可能是DB(数据库))
[0060]4.2返回消息注册成功(如果失败,则业务系统直接回滚,消息中心不会发起回查。)
[0061]5.提交分布式事务。业务系统处理完成。
[0062]6.消息中心回查业务系统,通过业务ID。
[0063]7.业务系统根据ID,查询本地业务数据,是否处理成功/失败。返回给消息中心。注意:这里回查时,如果业务系统的分布式消息过多时,可能会有很多回查接口,而且多个回查接口可能操作同一张业务表,会导致回查接口的业务非常复杂。
[0064]8.消息中心收到业务系统的回查结果,如果返回true,则发送该消息,返回false则丢弃,如果调用时出现异常,则进行回查重试。
[0065]针对上述多个回查接口的复杂设计,如图3所示,在一优选实例中的分布式事务消息回查设计方案,其步骤主要如下:
[0066]1.开始业务处理
[0067]2.开启分布式事务
[0068]3.开启本地事务(本地事务是独立事务,不受分布式事务控制,保证事务回查表的插入不受其他业务信息影响)
[0069]4.插入一条事务回查表记录,状态为INIT(即第一状态)。可以理解,在本发明的其他实施方式中,还可以以其他形式保存分布式事务的标识和状态值的对应关系,不限于上述的事务回查表。
[0070]5.提交本地事务(注意:如果本地事务提交失败,会导致整个分布式事务回滚)。可以理解,在本发明的其他实施例中,上述事务回查表记录也可以不在本地事务中插入,只要可以在上述业务系统中共享即可。
[0071]6.锁住这条事务回查表记录(注意:1.该锁为DB查询锁,2.目的是为了防止消息乱串时,本地业务还没有处理结束,消息回查已经过来,如果出现这种情况,请看后续的
12.2处理)。可以理解,在某些特定情况下,也可以不对该条事务回查表记录加锁。
[0072]7.进行本地表事务操作。
[0073]8.调用消息中心注册消息(注意:此时带的ID为事务回查表的ID,其它业务信息可直接忽略)。
[0074]9.消息中心返回结果;如果返回成功,则继续后续处理。如果返回失败,则整个分布式事务回滚,不再有回查操作(如果消息中心出现问题或者调用中出现异常,消息中心注册成功,但是业务系统异常,此时业务系统事务回滚,但是消息中心还是会回查,请看后续的12.3处理。)。
[0075]10.更新事务回查表状态为SUCCESS (即第二状态)。若未处理成功,则不进行该更新。
[0076]11.提交分布式事务。
[0077]12.消息中心回查业务系统(事务回查表ID)
[0078]12.1根据事务回查表ID,查询事务回查表数据,并锁表。(DB查询锁)。
[0079]12.2如果拿不到锁,则说明还处在9-11阶段,返回异常,让消息中心重试。
[0080]12.3如果拿到锁,且状态为INIT,则说明系统已经处理完成,分布式事务已经回滚,返回false给消息中心,清除该消息。
[0081]12.4如果拿到锁,且状态为SUCCESS,则说明系统处理成功,返回true给消息中心,让消息中心发送该消息。
[0082]13.消息中心根据业务系统给的结果,判断消息是发送,清除,还是重试。可以看至IJ,通过上述步骤3 — 6、10和12的改动,只需要设计一个回查接口,本系统内的所有分布式事务消息都可以通过一个接口进行回查,避免了多个消息回查接口的重复设计,并且避免了多个回查接口中复杂的业务设计,譬如:判断不同业务是否成功等等。
[0083]此外,可以理解,在本发明的其他实施例中,也可以根据需要设计多个回查接口,每个业务对应一个回查接口,在每个回查接口中处理对应的业务回查。
[0084]以上仅为本发明一优选例,可以根据需要在上述方法中增加或减少相应步骤,并改变相应的配置。
[0085]本发明的各方法实施方式均可以以软件、硬件、固件等方式实现。不管本发明是以软件、硬件、还是固件方式实现,指令代码都可以存储在任何类型的计算机可访问的存储器中(例如永久的或者可修改的,易失性的或者非易失性的,固态的或者非固态的,固定的或者可更换的介质等等)。同样,存储器可以例如是可编程阵列逻辑(Programmable ArrayLogic,简称“PAL”)、随机存取存储器(Random Access Memory,简称“RAM”)、可编程只读存储器(Programmable Read Only Memory,简称 “PROM”)、只读存储器(Read-Only Memory,简称“ROM”)、电可擦除可编程只读存储器(Electrically Erasable Programmable ROM,简称“EEPR0M”)、磁盘、光盘、数字通用光盘(Digital Versatile Disc,简称“DVD”)等等。
[0086]本发明第二实施方式涉及一种分布式事务的消息回查系统。图4是该分布式事务的消息回查系统的结构示意图。
[0087]如图4所示,该系统包括:
[0088]保存模块,用于在业务系统开启分布式事务后在该业务系统中保存该分布式事务的标识和状态值的对应关系,其中状态值设为第一状态。优选地,保存模块用于在本地事务中保存该分布式事务的标识和状态的对应关系。在本地事务中保存分布式事务的标识和状态值的对应关系不会受到分布式事务的影响。此外,可以理解,上述系统还包括回滚模块,用于在业务系统提交本地事务失败时,回滚分布式事务。
[0089]发送模块,用于控制业务系统向消息中心发送注册消息,该注册消息中包括分布式事务的标识。
[0090]修改模块,用于控制业务系统在分布式事务处理成功后,将对应关系中该分布式事务的状态值修改为第二状态。
[0091]查询模块,用于控制业务系统在收到来自消息中心的回查消息时,根据该回查消息中的分布式事务的标识查询对应关系,获得该分布式事务的状态值。以及
[0092]响应模块,用于控制业务系统根据该查询模块获取的分布式事务的状态值向消息中心发送针对回查消息的响应消息。
[0093]此外,可以理解,上述系统还包括回滚模块,用于在向消息中心发送注册消息失败时或业务系统发生异常时或其他时候,回滚分布式事务。
[0094]在本实施方式的系统中,保存模块在业务系统开启分布式事务后保存该分布式事务的标识和状态值的对应关系,发送模块向消息中心发送包括该分布式事务的标识的注册消息,则在收到来自上述消息中心的回查消息时,只需要配置一个回查接口,避免了分布式事务消息的多个回查接口的重复设置,并且只需要根据该分布式事务的状态值来返回响应消息给上述消息中心,回查操作方便。
[0095]优选地,分布式事务的标识和状态值的对应关系是业务系统的数据库记录。当然,在本发明的其他实施方式中,分布式事务的标识和状态值的对应关系也可以是数据表等其他形式。
[0096]上述保存模块包括:
[0097]增加子模块,用于在业务系统的数据库中增加一条数据库记录,该数据库记录包括分布式事务的标识和状态值。以及
[0098]加锁子模块,用于对该数据库记录加读取锁。
[0099]上述查询模块包括:
[0100]查询子模块,用于根据回查消息中的分布式事务的标识查询业务系统的数据库,得到一条数据库记录。
[0101]尝试子模块,用于尝试获取数据库记录的读取锁。
[0102]读取子模块,用于如果尝试子模块成功获取数据库记录的读取锁,则读取该数据库记录中的状态值。以及
[0103]反馈子模块,用于如果尝试子模块未能成功获取数据库记录的读取锁,则控制业务系统向消息中心发送表示请求消息中心重新进行回查的消息。
[0104]在保存数据库记录时对该数据库记录加上读取锁,可以防止消息乱串,以使回查更准确。
[0105]此外,可以理解,在某些特定情况下,也可以不对数据库记录加锁。
[0106]作为可选实施方式,上述响应模块包括:
[0107]第一响应子模块,用于如果分布式事务的状态值为第一状态,则控制业务系统向消息中心发送表示请求消息中心不再发送消息的消息。以及
[0108]第二响应子模块,用于如果分布式事务的状态值为第二状态,则业务系统向消息中心发送表示请求消息中心发送消息的消息。
[0109]可以理解,在本发明的各个实施方式中,状态值和各类消息可以根据需要进行设置。例如,第一状态为初始状态,若分布式事务处理成功,将状态值设为第二状态;若分布式事务处理不成功,将状态值设为第二状态等等。
[0110]第一实施方式是与本实施方式相对应的方法实施方式,本实施方式可与第一实施方式互相配合实施。第一实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在第一实施方式中。
[0111]综上,本发明的分布式事务的消息回查方法及其系统抛弃了复杂的回查接口设计,通过一个回查接口解决所有回查接口需求。
[0112]需要说明的是,本发明各设备实施方式中提到的各模块都是逻辑模块,在物理上,一个逻辑模块可以是一个物理模块,也可以是一个物理模块的一部分,还可以以多个物理模块的组合实现,这些逻辑模块本身的物理实现方式并不是最重要的,这些逻辑模块所实现的功能的组合才是解决本发明所提出的技术问题的关键。此外,为了突出本发明的创新部分,本发明上述各设备实施方式并没有将与解决本发明所提出的技术问题关系不太密切的模块引入,这并不表明上述设备实施方式并不存在其它的模块。
[0113]需要说明的是,在本专利的权利要求和说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0114]虽然通过参照本发明的某些优选实施方式,已经对本发明进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
【主权项】
1.一种分布式事务的消息回查方法,其特征在于,所述方法包括以下步骤: 业务系统在开启分布式事务后,在该业务系统中保存该分布式事务的标识和状态值的对应关系,其中所述状态值设为第一状态; 所述业务系统向消息中心发送注册消息,该注册消息中包括所述分布式事务的标识;所述业务系统在所述分布式事务处理成功后,将所述对应关系中该分布式事务的状态值修改为第二状态; 所述业务系统收到来自所述消息中心的回查消息时,根据该回查消息中的分布式事务的标识查询所述对应关系,获得该分布式事务的状态值; 所述业务系统根据所述分布式事务的状态值向所述消息中心发送针对所述回查消息的响应消息。2.根据权利要求1所述的分布式事务的消息回查方法,其特征在于,所述分布式事务的标识和状态值的对应关系是所述业务系统的数据库记录; 所述“在该业务系统中保存该分布式事务的标识和状态值的对应关系”的步骤中包括以下子步骤: 在所述业务系统的数据库中增加一条数据库记录,该数据库记录包括分布式事务的标识和状态值; 对该数据库记录加读取锁; 所述“根据该回查消息中的分布式事务的标识查询所述对应关系,获得该分布式事务的状态值”的步骤中包括以下子步骤: 根据所述回查消息中的分布式事务的标识查询所述业务系统的数据库,得到一条数据库记录; 尝试获取所述数据库记录的读取锁; 如果成功获取所述数据库记录的读取锁,则读取该数据库记录中的状态值; 如果未能成功获取所述数据库记录的读取锁,则所述业务系统向所述消息中心发送表示请求消息中心重新进行回查的消息。3.根据权利要求1所述的分布式事务的消息回查方法,其特征在于,“所述业务系统根据所述分布式事务的状态值向所述消息中心发送针对所述回查消息的响应消息”的步骤中包括以下子步骤: 如果所述分布式事务的状态值为第一状态,则所述业务系统向所述消息中心发送表示请求消息中心不再发送消息的消息; 如果所述分布式事务的状态值为第二状态,则所述业务系统向所述消息中心发送表示请求消息中心发送消息的消息。4.根据权利要求1至3中任一项所述的分布式事务的消息回查方法,其特征在于,在向所述消息中心发送注册消息失败时或所述业务系统发生异常时,所述分布式事务回滚。5.根据权利要求1至3中任一项所述的分布式事务的消息回查方法,其特征在于,所述“业务系统在开启分布式事务后,在该业务系统中保存该分布式事务的标识和状态值的对应关系”的步骤中,所述业务系统在本地事务中保存该分布式事务的标识和状态值的对应关系; 所述业务系统提交本地事务失败时,所述分布式事务回滚。6.一种分布式事务的消息回查系统,其特征在于,所述系统包括: 保存模块,用于在业务系统开启分布式事务后在该业务系统中保存该分布式事务的标识和状态值的对应关系,其中所述状态值设为第一状态; 发送模块,用于控制所述业务系统向消息中心发送注册消息,该注册消息中包括所述分布式事务的标识; 修改模块,用于控制所述业务系统在所述分布式事务处理成功后,将所述对应关系中该分布式事务的状态值修改为第二状态; 查询模块,用于控制所述业务系统在收到来自所述消息中心的回查消息时,根据该回查消息中的分布式事务的标识查询所述对应关系,获得该分布式事务的状态值;以及 响应模块,用于控制所述业务系统根据所述查询模块获取的所述分布式事务的状态值向所述消息中心发送针对所述回查消息的响应消息。7.根据权利要求6所述的分布式事务的消息回查系统,其特征在于,所述分布式事务的标识和状态值的对应关系是所述业务系统的数据库记录; 所述保存t吴块包括: 增加子模块,用于在该业务系统的数据库中增加一条数据库记录,该数据库记录包括分布式事务的标识和状态值;以及 加锁子模块,用于对该数据库记录加读取锁; 所述查询模块包括: 查询子模块,用于根据所述回查消息中的分布式事务的标识查询所述业务系统的数据库,得到一条数据库记录; 尝试子模块,用于尝试获取所述数据库记录的读取锁; 读取子模块,用于如果所述尝试子模块成功获取所述数据库记录的读取锁,则读取该数据库记录中的状态值;以及 反馈子模块,用于如果所述尝试子模块未能成功获取所述数据库记录的读取锁,则控制所述业务系统向所述消息中心发送表示请求消息中心重新进行回查的消息。8.根据权利要求6所述的分布式事务的消息回查系统,其特征在于,所述响应模块包括: 第一响应子模块,用于如果所述分布式事务的状态值为第一状态,则控制所述业务系统向所述消息中心发送表示请求消息中心不再发送消息的消息;以及 第二响应子模块,用于如果所述分布式事务的状态值为第二状态,则所述业务系统向所述消息中心发送表示请求消息中心发送消息的消息。9.根据权利要求6至8中任一项所述的分布式事务的消息回查系统,其特征在于,所述系统还包括回滚模块,用于在向所述消息中心发送注册消息失败时或所述业务系统发生异常时,回滚所述分布式事务。10.根据权利要求6至8中任一项所述的分布式事务的消息回查系统,其特征在于,所述保存模块用于在本地事务中保存该分布式事务的标识和状态的对应关系; 所述系统还包括回滚模块,用于在所述业务系统提交本地事务失败时,回滚所述分布式事务。
【文档编号】G06F17/30GK105893395SQ201510039544
【公开日】2016年8月24日
【申请日】2015年1月26日
【发明人】郭斌
【申请人】阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1