一种消息补偿方法及装置与流程

文档序号:18464043发布日期:2019-08-17 02:17阅读:200来源:国知局
一种消息补偿方法及装置与流程

本发明涉及计算机技术领域,具体涉及一种消息补偿方法及装置。



背景技术:

随着业务数据的种类和数量的不断增多,计算机节点(如,服务器和数据库等)的运行压力也越来越大,为了降低计算机节点的运行压力,同时提高处理业务数据的能力,通常使用分布式事务的方式来处理业务数据,即,通过多个独立运行的计算机节点共同处理一个事务。

在实际应用中,多个独立运行的计算机节点在共同处理一个事务的过程中,由于网络问题会造成各个计算机节点间传输的数据存在丢失或混乱,如,在共同处理转账业务时,两个账号分布于两个不同的数据库或者子系统里,此时位于数据库a的账号a要向位于数据库b的账号b转账,假设数据库a在执行完转账操作并在向消息中间件发送消息后,网络出现连接错误,那么消息中间件在接收到数据库a发送消息后无法插入到消息中间件对应的数据库内(即,消息丢失),后续也无法发送给数据库b,从而造成账号a已经显示转账,而账号b则未显示转账,从而使得整个事务出现错误,因此,针对上述情况需要对未插入到数据库内的消息(即,丢失的消息)进行补偿,以免整个事务出现错误。

现有技术通常是消息中间件会定期扫描消息集群中的事务消息,若发现prepared消息,则向prepared发送端确认,后续,消息中间件会根据prepared发送端的反馈消息来决定对prepared消息对应的事务消息是回滚还是继续向接收端发送确认消息。

但是,能够实现上述现有技术的消息中间件的事务消息部分的代码未开源,技术实现的难度比较大。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的消息补偿方法及装置。

根据本发明的一个方面,一种消息补偿方法,所述方法包括:

当监测到指定的报错信息时,捕捉消息中间件发送的,且未成功插入到数据库中的消息;

将所述消息存储到指定区域内;

按照预设的时间间隔,周期性的从所述指定区域内获取至少一个消息;

将获取的消息插入到数据库中。

根据本发明的另一方面,提供了一种消息补偿装置,所述装置包括:

捕捉模块,用于当监测模块监测到指定的报错信息时,捕捉消息中间件发送的,且未成功插入到数据库中的消息;

存储模块,用于将所述消息存储到指定区域内;

获取模块,用于按照预设的时间间隔,周期性的从所述指定区域内获取至少一个消息;

插入模块,用于将获取的消息插入到数据库中。

根据本发明的又一方面,提供了一种服务器,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;

所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行以下操作:

当监测到指定的报错信息时,捕捉消息中间件发送的,且未成功插入到数据库中的消息;

将所述消息存储到指定区域内;

按照预设的时间间隔,周期性的从所述指定区域内获取至少一个消息;

将获取的消息插入到数据库中。

根据本发明的又一方面,提供了一种存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行以下操作:

当监测到指定的报错信息时,捕捉消息中间件发送的,且未成功插入到数据库中的消息;

将所述消息存储到指定区域内;

按照预设的时间间隔,周期性的从所述指定区域内获取至少一个消息;

将获取的消息插入到数据库中。

根据本发明提供的消息补偿方法及装置,该方法包括:当监测到指定的报错信息时,捕捉消息中间件发送的,且未成功插入到数据库中的消息,将所述消息存储到指定区域内,按照预设的时间间隔,周期性的从所述指定区域内获取至少一个消息,将获取的消息插入到数据库中。利用上述发明,即使当前的分布式事务存在消息丢失(如,未成功插入到数据库内)的情况,也可以成功的捕捉到丢失的消息,并将消息插入到数据库内,大大降低了技术实现的难度。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了根据本发明一个实施例的消息补偿方法的流程图;

图2为本申请实施例提供了一种消息补偿的系统结构图;

图3为本申请实施例提供的一种消息补偿的具体实施方式;

图4为本申请实施例提供了一种消息补偿的装置;

图5示出了本发明的一种服务器的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

图1示出了根据本发明一个实施例的消息补偿方法的流程图。本方法用于补偿未成功插入到数据库内的消息。如图1所示,该方法包括如下步骤:

s101:当监测到指定的报错信息时,捕捉消息中间件发送的,且未成功插入到数据库中的消息。

在实际应用中,多个独立运行的计算机节点在共同处理一个事务的过程中,由于网络问题会造成各个计算机节点间传输的数据存在丢失或混乱,如,在共同处理转账业务时,两个账号分布于两个不同的数据库或者子系统里,此时位于数据库a的账号a要向位于数据库b的账号b转账,假设数据库a在执行完转账操作并在向消息中间件发送消息后,网络出现连接错误,那么消息中间件在接收到数据库a发送消息后无法插入到消息中间件对应的数据库内(即,消息丢失),后续也无法发送给数据库b,从而造成账号a已经显示转账,而账号b则未显示转账,从而使得整个事务出现错误,因此,针对上述情况需要对未插入到数据库内的消息(即,丢失的消息)进行补偿,以免整个事务出现错误。

由于想要实现对未成功插入到数据库内的消息(即,丢失的消息)进行补偿,首先需要知道什么时候需要对未插入到数据库内的消息进行补偿,因此,在本申请实施例中,需要知道什么时候会出现有消息未成功插入到数据库内的情况。

进一步的,在本申请实施例中,想要知道什么时候会出现有消息未成功插入到数据库内的情况,具体可以实时监测当前是否存在指定的报错信息。

在此需要说明的是,指定的报错信息可以根据实际情况而定,本申请实施例提供两种不同的报错信息,具体的,指定的报错信息包括:网络故障报错信息和/或硬件故障报错信息,出现上述任何一个报错信息都有可能会出现有消息未成功插入到数据库内的情况。

进一步的,由于本发明主要解决的是对消息中间件向其对应的数据库内插入消息时会因为网络连接错误等问题所出现的未成功插入到数据库内的消息进程补偿,因此,在本申请实施例中,当监测到指定的报错信息时,需要捕捉消息中间件发送的,且未成功插入到数据库中的消息。

在此需要说明的是,没有监测到指定的报错信息时,说明消息中间件将所接收到的消息成功的向其对应的数据库内插入消息。

s102:将所述消息存储到指定区域内。

由于在实际应用中,网络故障或者硬件故障的修复需要一定的时间,因此,在本申请实施例中,在捕捉到消息中间件发送的,且未成功插入到数据库中的消息后,需要将捕捉到的消息存储到指定区域内。

s103:按照预设的时间间隔,周期性的从所述指定区域内获取至少一个消息。

s104:将获取的消息插入到数据库中。

在实际应用中,由于为了避免分布式事务出现错误,需要将存储到指定区域内的消息重新插入到数据库内。

由于在将存储到指定区域内的消息重新插入到数据库内的过程中,当前的网络或者硬件有可能依然存在故障,而网络故障或者硬件故障什么时候能够修复是未知的,因此,在本申请实施例中,可以按照预设的时间间隔,周期性的从所述指定区域内获取至少一个消息,如果当前没有网络或者硬件的故障,则可以直接成功的将所获取的至少一个消息插入到数据库中,如果当前的网络或者硬件依然存在故障,则无法成功的将所获取的至少一个消息插入到数据库中,可以在下一个时间间隔内重新获取当前所获取的消息,直到成功插入到数据库内,这样无需关注当前是否存在网络或者硬件的故障。

另外,在本申请实施例中,也可以实时监测当前的网络或硬件故障是否已经修复完成,若修复完成,则从指定区域内获取至少一个消息插入到数据库中,若没有修复完成,则不做任何操作。

在此需要说明的是,在本申请实施例中,周期性的从所述指定区域内获取至少一个消息,具体可以周期性的从所述指定区域内获取全部所述消息。

通过上述方法,即使当前的分布式事务存在消息丢失(如,未成功插入到数据库内)的情况,也可以成功的捕捉到丢失的消息,并将消息插入到数据库内,大大降低了技术实现的难度。

由于在实际应用中,logback滚动日志工具具有捕捉消息,并周期性将所捕捉的消息插入到指定区域的功能,因此,在本申请实施例中,可以通过调用logback滚动日志工具执行步骤s101~步骤s104,具体的,通过logback滚动日志工具捕捉消息中间件发送的,且未成功插入到数据库中的消息,将所述消息存储到指定区域内,按照预设的时间间隔,周期性的从所述指定区域内获取至少一个消息,将获取的消息插入到数据库中。

另外,本申请实施例提供了一种消息补偿的系统结构图,如图2所示,其中,消息中间件将消息传输给流计算引擎,流计算引擎调用logback滚动日志工具来实施步骤s102~步骤s104。

在本申请实施例中,为了能够排查出当前网络或者硬件具体是什么故障,在将获取的消息成功插入到数据库中后,可以将插入到数据库中的消息复制到报错排查文件内,并在所述指定区域内删除消息,后续,故障检查人员可以根据报错排查文件排查故障。

为了更加清楚的阐述本发明,以下以数据库为hbase数据库,执行本发明的装置的操作系统为linux,消息的数据格式为json格式的数据为例进行说明,如图3所示:

s301:当监测到指定的报错信息时,通过logback滚动日志工具捕捉消息中间件发送的,且未成功插入到hbase数据库中的消息。

在此需要说明的是,消息为json格式的数据。

s302:通过logback滚动日志工具将所捕捉到的消息存储到linux固定的目录中。

s303:通过logback滚动日志工具定时读取存储到linux固定目录中的json格式的消息。

在此需要说明的是,可以读取一个消息,也可以读取多个消息。

s304:将获取的消息插入到hbase数据库中。

s305:在将获取的消息插入到hbase数据库之后,将插入到数据库中的消息复制到报错排查文件内。

s306:在linux固定目录中删除已插入到hbase数据库中的消息。

以上是本申请实施例提供的消息补偿的方法,基于此,本申请实施例提供了一种消息补偿的装置,如图4所示,该装置包括:

捕捉模块402,用于当监测模块401监测到指定的报错信息时,捕捉消息中间件发送的,且未成功插入到数据库中的消息;

存储模块403,用于将所述消息存储到指定区域内;

获取模块404,用于按照预设的时间间隔,周期性的从所述指定区域内获取至少一个消息;

插入模块405,用于将获取的消息插入到数据库中。

所述指定的报错信息包括:网络故障报错信息和/或硬件故障报错信息。

所述捕捉模块402具体用于,通过logback滚动日志工具捕捉消息中间件发送的,且未成功插入到数据库中的消息。

所述获取模块404具体用于,周期性的从所述指定区域内获取全部所述消息。

所述装置还包括:

复制删除模块406,用于在所述插入模块将获取的消息插入到数据库中之后,将插入到数据库中的消息复制到报错排查文件内,并在所述指定区域内删除消息。

所述数据库包括:hbase数据库。

本申请实施例还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的消息补偿方法。

图5示出了本发明的一种服务器的结构示意图,本发明具体实施例并不对服务器的具体实现做限定。

如图5所示,该服务器可以包括:处理器(processor)502、通信接口(communicationsinterface)504、存储器(memory)506、以及通信总线508。

其中:

处理器502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。

通信接口504,用于与其它设备比如客户端或其它服务器等的网元通信。

处理器502,用于执行程序510,具体可以执行上述消息补偿方法实施例中的相关步骤。

具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。

处理器502可能是中央处理器cpu,或者是特定集成电路asic(applicationspecificintegratedcircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。服务器包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个cpu;也可以是不同类型的处理器,如一个或多个cpu以及一个或多个asic。

存储器506,用于存放程序510。存储器506可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。

程序510具体可以用于使得处理器502执行以下操作:

当监测到指定的报错信息时,捕捉消息中间件发送的,且未成功插入到数据库中的消息;

将所述消息存储到指定区域内;

按照预设的时间间隔,周期性的从所述指定区域内获取至少一个消息;

将获取的消息插入到数据库中。

可选地,程序510还可以用于使得处理器502执行以下操作:

所述指定的报错信息包括:网络故障报错信息和/或硬件故障报错信息。

可选地,程序510还可以用于使得处理器502执行以下操作:

通过logback滚动日志工具捕捉消息中间件发送的,且未成功插入到数据库中的消息。

可选地,程序510还可以用于使得处理器502执行以下操作:

周期性的从所述指定区域内获取全部所述消息。

可选地,程序510还可以用于使得处理器502执行以下操作:

在将获取的消息插入到数据库中之后,将插入到数据库中的消息复制到报错排查文件内,并在所述指定区域内删除消息。

可选地,程序510还可以用于使得处理器502执行以下操作:

所述数据库包括:hbase数据库。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的消息补偿设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1