消息处理方法及装置与流程

文档序号:11138414阅读:659来源:国知局
消息处理方法及装置与制造工艺

本发明涉及数据处理领域,具体而言,涉及一种消息处理方法及装置。



背景技术:

流式计算框架相对于批处理计算框架,其解决的问题是对实时数据流的计算。Storm是一个分布式是实时计算系统,可以简单可靠地处理流数据。Storm可以应用在实时分析、在线机器学习、连续计算、分布式远程过程调用协议(Remote Procedure Call Protocol,简称为RPC)调用、数据仓库技术(Extract-Transform-Load,简称为ETL)等方面。Storm有可扩展、容错、数据处理可靠性高等特点。

流式计算中的消息可靠性是指保证从数据源发出的每个消息(Tuple)都会被完全处理。在Storm里面一个Tuple被完全处理的意思是:这个Tuple以及由这个Tuple所产生的所有的Tuple都被成功处理。而一个Tuple会被认为处理失败了如果这个消息在timeout所指定的时间内没有成功处理。

现有的消息可靠性方案主要通过引入Acker组件并通过异或算法保证消息可靠性。具体地,Acker组件的任务就是跟踪从某个Spout(Spout是指Storm应用(Topology)中的消息源,通常情况下Spout会从外部数据源中读取数据,然后转换为Topology内部的源数据)流出的每一个消息Id所绑定的Tuple树中的所有Tuple的处理情况。如果在用户设置的最大超时时间内这些Tuple没有被完全处理,那么Acker会告诉Spout该消息处理失败,相反则会告知Spout该消息处理成功,它会分别调用Spout中的fail和ack方法。

然而采用Acker组件管理所有组件的消息确认信号,Acker数量无法根据实时数据量进行动态调整,容易造成Acker闲置或单点故障。另外,在出现差错的情况下,消息源需要从根节点对消息重新进行重复处理,消息处理的效率低。



技术实现要素:

本发明提供了一种消息处理方法及装置,以至少解决相关技术中在出现差错的情况下消息处理的效率低的问题。

根据本发明的一个方面,提供了一种消息处理方法,包括:第一层节点接收第一消息,并存储所述第一消息,所述第一层节点包括一个或者多个第一节点;所述第一层节点对所述第一消息进行处理,生成第二消息,并向第二层节点发送所述第二消息,其中,所述第二层节点包括一个或者多个第二节点,所述第一层节点中的每个第一节点对应一 个或者多个第二节点;所述第二层节点接收所述第二消息后,对所述第二消息进行处理,并向所述第一层节点返回处理结果;在所述处理结果为处理失败的情况下,所述第一层节点获取存储的所述第一消息,并重新对所述第一消息进行处理。

进一步地,在第一层节点接收第一消息,并存储所述第一消息之后,所述方法还包括:添加对所述第一消息的记录;其中,所述第一层节点获取存储的所述第一消息包括:所述第一层节点查询所述记录,获取存储的所述第一消息。

进一步地,在第一层节点接收第一消息,并存储所述第一消息之前,所述方法还包括:根节点将接收到的数据封装成多个所述第一消息,存储所述多个所述第一消息;所述根节点添加多个所述第一消息的记录。

进一步地,所述方法还包括:所述根节点向所述第一层节点发送所述第一消息,启动定时器开始计时;在所述定时器到期前接收到所述第一层节点返回的处理成功的消息,则确定所述第一消息处理成功;在接收到所述第一层节点返回的处理失败的消息,或者,在所述定时器到期前未接收到所述第一层节点返回的处理成功的消息,则查询处理失败的第一消息的记录,获取查询到的第一消息,重新将向所述第一层节点发送获取到的第一消息。

进一步地,所述第一层节点重新对所述第一消息进行处理之后,所述方法还包括:重新生成第二消息,并向第二层节点发送重新生成的第二消息;其中,在所述重新生成的第二消息的处理结果仍为处理失败的情况下,所述第一层节点向所述根节点返回所述第一消息处理失败的消息。

进一步地,所述方法还包括:所述第二层节点存储所述第二消息;对所述第二消息进行处理,生成第三消息,并向第三层节点发送所述第三消息,其中,所述第三层节点包括一个或者多个第三节点,所述第二层节点中的每个第二节点对应一个或者多个第三节点;所述第三层节点接收所述第三消息后,对所述第三消息进行处理,并向所述第二层节点返回处理结果;在所述第三消息的处理结果为处理失败的情况下,所述第二层节点获取存储的所述第二消息,并重新对所述第二消息进行处理,重新生成第三消息,向所述第三层节点发送重新生成的第三消息。

进一步地,所述方法还包括:在所述重新生成的第三消息的处理结果仍为处理失败的情况下,所述第二层节点向所述第一层节点返回所述第二消息处理失败的消息。

根据本发明的另一方面,提供了一种消息处理装置,包括:第一存储单元,设置在第一层节点上,用于接收第一消息,并存储所述第一消息,所述第一层节点包括一个或者多个第一节点;第一处理单元,设置在所述第一层节点上,用于对所述第一消息进行处理,生成第二消息,并向第二层节点发送所述第二消息,其中,所述第二层节点包括一个或者多个第二节点,所述第一层节点中的每个第一节点对应一个或者多个第二节点;第二处理单元,设置在所述第二层节点上,用于接收所述第二消息后,对所述第二消息 进行处理,并向所述第一层节点返回处理结果;所述第一处理单元还用于在所述处理结果为处理失败的情况下,获取存储的所述第一消息,并重新对所述第一消息进行处理。

进一步地,所述装置还包括:第一记录单元,设置在所述第一层节点上,用于在第一层节点接收第一消息,并存储所述第一消息之后,添加对所述第一消息的记录;其中,所述第一处理单元包括:获取模块,用于查询所述记录,获取存储的所述第一消息。

进一步地,所述装置还包括:第二存储单元,设置在根节点上,用于在第一层节点接收第一消息,并存储所述第一消息之前,将接收到的数据封装成多个所述第一消息,存储所述多个所述第一消息;第二记录单元,设置在所述根节点上,用于添加多个所述第一消息的记录。

进一步地,所述装置还包括:发送单元,设置在所述根节点上,用于向所述第一层节点发送所述第一消息,启动定时器开始计时;确定单元,设置在所述根节点上,用于在所述定时器到期前接收到所述第一层节点返回的处理成功的消息,则确定所述第一消息处理成功;所述发送单元还用于在接收到所述第一层节点返回的处理失败的消息,或者,在所述定时器到期前未接收到所述第一层节点返回的处理成功的消息,则查询处理失败的第一消息的记录,获取查询到的第一消息,重新将向所述第一层节点发送获取到的第一消息。

进一步地,所述第一处理单元还用于在重新对所述第一消息进行处理之后,重新生成第二消息,并向第二层节点发送重新生成的第二消息;其中,所述装置还包括:第一返回单元,设置在所述第一层节点上,用于在所述重新生成的第二消息的处理结果仍为处理失败的情况下,向所述根节点返回所述第一消息处理失败的消息。

进一步地,所述装置还包括:第三存储单元,设置在所述第二层节点上,用于存储所述第二消息;第三处理单元,设置在所述第二层节点上,用于对所述第二消息进行处理,生成第三消息,并向第三层节点发送所述第三消息,其中,所述第三层节点包括一个或者多个第三节点,所述第二层节点中的每个第二节点对应一个或者多个第三节点;第四处理单元,设置在所述第三层节点上,用于接收所述第三消息后,对所述第三消息进行处理,并向所述第二层节点返回处理结果;所述第三处理单元还用于在所述第三消息的处理结果为处理失败的情况下,所述第二层节点获取存储的所述第二消息,并重新对所述第二消息进行处理,重新生成第三消息,向所述第三层节点发送重新生成的第三消息。

进一步地,所述装置还包括:第二返回单元,设置在所述第二层节点上,用于在所述重新生成的第三消息的处理结果仍为处理失败的情况下,向所述第一层节点返回所述第二消息处理失败的消息。

通过在第二层节点对第二消息处理失败的情况下,由第一层节点获取预先存储的第一消息,并重新对第一消息进行处理,以便于重新生成第二消息发送给第二层节点,第 二层节点则可以对重新生成的第二消息进行处理,无需从根节点对消息重新进行重复处理,解决了在出现差错的情况下消息处理的效率低的问题,提高了在出现差错的情况下消息处理的效率。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据本发明实施例的消息处理方法的流程图;

图2是根据本发明可选实施例的逐层反馈的示意图;

图3是根据本发明可选实施例的差错重传的示意图;

图4是根据本发明实施例的消息处理装置的结构框图。

具体实施方式

下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

在本实施例中提供了一种消息处理方法,该方法可以用于流式计算框架的消息处理。

图1是根据本发明实施例的消息处方法的流程图,如图1所示,该流程包括如下步骤:

步骤S102,第一层节点接收第一消息,并存储第一消息,第一层节点包括一个或者多个第一节点;

步骤S104,第一层节点对第一消息进行处理,生成第二消息,并向第二层节点发送第二消息,其中,第二层节点包括一个或者多个第二节点,第一层节点中的每个第一节点对应一个或者多个第二节点;

步骤S106,第二层节点接收第二消息后,对第二消息进行处理,并向第一层节点返回处理结果;

步骤S108,在处理结果为处理失败的情况下,第一层节点获取存储的第一消息,并重新对第一消息进行处理。

第一层节点和第二层节点可以是消息处理的中间节点,其中,第二层节点是第一层节点的下游节点。

通过上述步骤,在第二层节点对第二消息处理失败的情况下,由第一层节点获取预先存储的第一消息,并重新对第一消息进行处理,以便于重新生成第二消息发送给第二层节点,第二层节点则可以对重新生成的第二消息进行处理,无需从根节点对消息重新进行重复处理,解决了在出现差错的情况下消息处理的效率低的问题,提高了在出现差错的情况下消息处理的效率。

优选地,上述第一节点和第二节点,以及后文所提及的第三节点等等节点均可以是Bolt,该Bolt是Storm应用中进行消息处理的组件,Bolt可以执行过滤、函数操作、合并、写数据库等任何操作。

优选地,存储第一消息的可以是设置在第一层节点上的消息缓存(Buffer),用于缓存已发送消息,以及用于消息处理失败重传。其中,第二层节点在接收到第二消息时,也可以存储第二消息,以便于其下游节点消息处理失败时,获取存储的第二消息。

优选地,在第一层节点接收第一消息,并存储第一消息之后,方法还包括:添加对第一消息的记录;其中,第一层节点获取存储的第一消息包括:第一层节点查询记录,获取存储的第一消息。

第一层节点在接收到第一消息,并存储第一消息之后,可以添加第一消息的记录,以便于在获取第一消息时,可以基于该记录来获取。进一步优选地,可以利用消息确认模块(Ack模块)为消息添加记录。可选地,Ack模块还可以向上游消息源反馈消息处理情况,接收下游节点反馈消息。

消息的记录形式可以是按照预先定义的规则所设定的身份标识,例如序列号等,这里不做限定。

优选地,在第一层节点接收第一消息,并存储第一消息之前,方法还包括:根节点将接收到的数据封装成多个第一消息,存储多个第一消息;根节点添加多个第一消息的记录。

本实施例中,根节点可以是Spout,根节点从消息源读取数据,生成独立的消息单元,并将消息转发到若干第一层节点处理,经过第一层节点处理的消息也可能经过其他若干节点处理。根节点可以分别向多个第一层节点中每一个节点发送一个第一消息,并添加相应的记录,以便于第一层节点处理失败时,基于记录从存储的消息中获取相应的消息,重新发送到该第一层节点。

优选地,方法还包括:根节点向第一层节点发送第一消息,启动定时器开始计时;在定时器到期前接收到第一层节点返回的处理成功的消息,则确定第一消息处理成功;在接收到第一层节点返回的处理失败的消息,或者,在定时器到期前未接收到第一层节 点返回的处理成功的消息,则查询处理失败的第一消息的记录,获取查询到的第一消息,重新将向第一层节点发送获取到的第一消息。

若根节点在定时器到期内收到发出的消息的处理成功的消息,则表明对应消息处理成功。在定时到期时仍未收到发出消息对应的处理成功的消息或收到处理失败的消息,则从缓存中恢复源数据进行重传。

优选地,第一层节点重新对第一消息进行处理之后,方法还包括:重新生成第二消息,并向第二层节点发送重新生成的第二消息;其中,在重新生成的第二消息的处理结果仍为处理失败的情况下,第一层节点向根节点返回第一消息处理失败的消息。

本实施例中,当第二层节点处理第二消息失败的情况下,重新生成第二消息并向第二层节点重新发送该重新生成的第二消息,以便于第二层节点对重新进行处理,如果再次处理失败,则第一层节点向根节点返回处理失败的消息。

优选地,方法还包括:第二层节点存储第二消息;对第二消息进行处理,生成第三消息,并向第三层节点发送第三消息,其中,第三层节点包括一个或者多个第三节点,第二层节点中的每个第二节点对应一个或者多个第三节点;第三层节点接收第三消息后,对第三消息进行处理,并向第二层节点返回处理结果;在第三消息的处理结果为处理失败的情况下,第二层节点获取存储的第二消息,并重新对第二消息进行处理,重新生成第三消息,向第三层节点发送重新生成的第三消息。

若第二层节点的下游还包括第三层节点,那么第二层节点对第二消息进行处理,并生成第三消息,将其发送至第三层节点。在第三层节点对第三消息处理失败的情况下,则由第二层节点获取第二消息,并重新生成第三消息并重传,以便于第三层节点重新处理。这样,当第三层节点处理失败时,无需从根节点开始重复处理,只需从第二层节点重新处理第二消息,大大提高了在出现差错的情况下消息处理的效率。

进一步优选地,方法还包括:在重新生成的第三消息的处理结果仍为处理失败的情况下,第二层节点向第一层节点返回第二消息处理失败的消息。

如果第三消息重新处理第三消息后,处理结果仍为处理失败,则由第二层节点向第一层节点返回处理失败的消息。这使得在消息处理失败时,通过层层上报,最终才到根节点处。

下面以具体的应用来介绍本发明实施例。

Spout从消息源读取数据,生成独立的消息单元,并将消息转发到若干Bolt处理,经过Bolt处理的消息也可能经过其他若干Bolt处理。Spout和Bolt都包含Buffer模块和Ack模块,在消息处理前会将数据缓存在buffer中,并在Ack模块中进行记录。数据处理完成会通过Ack模块向上游数据源反馈处理结果。

流式处理框架的消息处理方法包括以下步骤:

第一步:

Spout处理源数据,向下游Bolt分发由源数据生成的消息。将生成的消息存入缓存buffer并启动定时器,Spout中的Ack模块为消息添加记录。

第二步:

Bolt接收上游消息,处理数据。若Bolt仍然有下游模块,则Ack模块记录待发送消息,并将上游消息存入缓存。反之,则在数据处理完成之后Ack模块向上游反馈ack_msg消息表明消息处理成功,消息处理失败则反馈fail_msg消息。

第三步:

Bolt接收到某条消息对应的所有下游Bolt反馈的ack_msg消息后,删除缓存中的该条消息并向上游Bolt或者Spout反馈ack消息。若接收到fail消息则从缓存中恢复对应的消息,重新处理。

第四步:

若Spout在定时器到期内收到发出的消息的ack消息,则表明对应消息处理成功。在定时到期时仍未收到发出消息对应的ack消息或收到fail消息,则从缓存中恢复源数据进行重传。

具体地,上述步骤可以通过以下方式实现:

对于第一步:

Spout将收集到的数据封装为若干消息Tuple,如图2生成id号分别为msg_0,msg_1的消息,发送Tuple到Bolt,启动定时器开始计时。

Spout将待发送的Tuple缓存到自身的buffer,ack为消息添加记录。记录格式为(msg_0),(msg_1)。

对于第二步:

Bolt接受来自上游Bolt或者Spout的消息Tuple,序列号为parent_id,缓存数据,并对数据进行处理。处理结果分为两种情况:生成新的Tuple,或者处理完不生成新的Tuple。

针对第一种情况,在处理来自上游组件的消息成功之后,Bolt中的Ack模块添加记录(parent_id,msg_id),并将来自上游的消息存入缓存。其中的parent_id表示上游发送到Bolt处理的Tuple的id号,Bolt可能由上游Tuple生成多个新的消息,其id号分别为msg_id_1,msg_id_2…msg_id_n。将记录中的msg_id更新为各消息id号之间的异或值,即msg_id=msg_id_1^msg_id_2…^msg_id_i^…^msg_id_n,msg_id_i为各消息的id号,均为64位随机序列。消息记录通常采用HashMap等数据结构实现。

如图2中Spout下游的两个Bolt,分别处理id为msg_0、msg_1的消息,生成消息msg_2、msg_3、msg_4,并向各自的缓存中添加记录(msg_0,msg_2^msg_3),(msg_1,msg_4)。若处理消息失败则向上游组件反馈处理失败消息fail_msg,fail_msg中包含了处理失败的消息的id号。

消息的确认采用异或算法:

上游组件处理id号为parent_id的消息,并由此生成id号分别为msg_id_1,msg_id_2,…,msg_id_n的消息,将生成的消息分发到下游组件处理,并添加消息记录(parent_id,msg_id_1^msg_id_2…^msg_id_n)。下游组件对msg_id_i处理完成之后会向上游反馈(parent_id,msg_id_i),上游查找到parent_id对应的记录msg_id=msg_id_1^msg_id_2…^msg_id_n,将msg_id与msg_id_i进行异或,结果赋给msg_id。所有消息都处理完成之后,异或结果为0,以此判断parent_id消息产生的消息都被处理。

第二种情况,处理完Tuple不生成新消息的Bolt,会发送确认消息ack_msg或者失败消息fail_msg到parent_id的消息源,确认消息数据部分的格式为(parent_id,msg_id)。

如图2中的最后一层的Bolt,处理消息msg_2,msg_3,msg_4完成之后分别向上游反馈ack_msg消息,表明各自消息处理完成。

对于第三步:

Bolt或Spout接收到来自下游Bolt的确认消息ack_msg后,Ack模块查询ack消息中parent_id所对应的记录,并将记录与ack_msg的msg_id进行异或。异或结果为0则表示parent_id所对应的消息已经完全处理,继续向上游反馈parent_id消息处理完毕。

如图2中Spout下游Bolt收到确认消息之后,找到消息记录(msg_0,msg_2^msg_3)将记录的值msg_2^msg_3与收到的确认消息中的值msg_2,msg_3分别进行异或,得到的结果为0,则表明消息msg_0处理成功,删除msg_0的缓存。同理将记录(msg_1,msg_4)中的msg_4与下游ack_msg消息中的值msg_4进行异或,得到结果为0,则表明msg_1处理完成。

若Bolt或Spout接收到来自下游Bolt的处理失败消息fail_msg,从缓存中恢复处理失败的消息重新处理重传。若下游继续返回fail_msg,则停止重传,继续向上游反馈fail_msg消息。

具体过程如图3所示,msg_2处理失败,发送fail_msg消息到Bolt,Bolt查询记录,从缓存恢复消息msg_0进行重新处理,生成消息msg_2、msg_3并分别进行重发。下游组件继续重新处理msg_2、msg_3,处理成功逐层向上反馈。

对于第四步:

各Bolt组件重复上述过程,不断向上游反馈处理结果,直到Spout接收到来自下游 Bolt的反馈消息,收到ack_msg则表明消息处理成功。

即图2中Spout下游的Bolt分别收到所有消息的确认信号之后向Spout发送ack_msg,Spout收到消息确认消息被处理完毕,删除缓存。

在等待时间T之内,如果Spout未收到消息的ack_msg,或者接受到下游反馈的fail_msg消息,则表示该消息处理失败,从buffer中恢复对应的消息进行重传或者放弃。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

本实施例与现有方案相比,通过逐层反馈的方式保证消息可靠性,降低了因为确认节点Acker数量无法动态调整造成的负载过大或者节点闲置。同时每层的处理节点设有缓存,减少了出现差错的情况下消息重发和重新处理的次数。提升了网络效率,降低网络开销。

在本实施例中还提供了一种消息处理装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“单元”、“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图4是根据本发明实施例的消息处理装置的结构框图,如图4所示,该装置包括:第一存储单元202、第一处理单元204和第二处理单元206。

第一存储单元202设置在第一层节点上,用于接收第一消息,并存储第一消息。第一层节点包括一个或者多个第一节点。

第一处理单元204设置在第一层节点上,用于对第一消息进行处理,生成第二消息,并向第二层节点发送第二消息。其中,第二层节点包括一个或者多个第二节点,第一层节点中的每个第一节点对应一个或者多个第二节点。

第二处理单元206设置在第二层节点上,用于接收第二消息后,对第二消息进行处理,并向第一层节点返回处理结果。

第一处理单元204还用于在处理结果为处理失败的情况下,获取存储的第一消息,并重新对第一消息进行处理。

第一层节点包含的第一节点和第二层节点包含的第二节点可以是消息处理的中间节点,其中,第二层节点是第一层节点的下游节点。

通过上述步骤,在第二层节点对第二消息处理失败的情况下,由第一层节点获取预先存储的第一消息,并重新对第一消息进行处理,以便于重新生成第二消息发送给第二层节点,第二层节点则可以对重新生成的第二消息进行处理,无需从根节点对消息重新进行重复处理,解决了在出现差错的情况下消息处理的效率低的问题,提高了在出现差错的情况下消息处理的效率。

优选地,上述第一层节点和第二层节点,以及后文所提及的第三层节点等等节点均可以是Bolt,该Bolt是Storm应用中进行消息处理的组件,Bolt可以执行过滤、函数操作、合并、写数据库等任何操作。

优选地,装置还包括:第一记录单元,设置在第一层节点上,用于在第一层节点接收第一消息,并存储第一消息之后,添加对第一消息的记录;其中,第一处理单元包括:获取模块,用于查询记录,获取存储的第一消息。

第一层节点在接收到第一消息,并存储第一消息之后,可以添加第一消息的记录,以便于在获取第一消息时,可以基于该记录来获取。第一记录单元可以是消息确认模块(Ack模块),用于为消息添加记录。消息的记录形式可以是按照预先定义的规则所设定的身份标识,例如序列号等,这里不做限定。

优选地,装置还包括:第二存储单元,设置在根节点上,用于在第一层节点接收第一消息,并存储第一消息之前,将接收到的数据封装成多个第一消息,存储多个第一消息;第二记录单元,设置在根节点上,用于添加多个第一消息的记录。

本实施例中,根节点可以是Spout,根节点从消息源读取数据,生成独立的消息单元,并将消息转发到若干第一层节点处理,经过第一层节点处理的消息也可能经过其他若干节点处理。根节点可以分别向多个第一层节点中每一个节点发送一个第一消息,并添加相应的记录,以便于第一层节点处理失败时,基于记录从存储的消息中获取相应的消息,重新发送到该第一层节点。

优选地,装置还包括:发送单元,设置在根节点上,用于向第一层节点发送第一消息,启动定时器开始计时;确定单元,设置在根节点上,用于在定时器到期前接收到第一层节点返回的处理成功的消息,则确定第一消息处理成功;发送单元还用于在接收到第一层节点返回的处理失败的消息,或者,在定时器到期前未接收到第一层节点返回的处理成功的消息,则查询处理失败的第一消息的记录,获取查询到的第一消息,重新将向第一层节点发送获取到的第一消息。

若根节点在定时器到期内收到发出的消息的处理成功的消息,则表明对应消息处理成功。在定时到期时仍未收到发出消息对应的处理成功的消息或收到处理失败的消息,则从缓存中恢复源数据进行重传。

优选地,第一处理单元还用于在重新对第一消息进行处理之后,重新生成第二消息, 并向第二层节点发送重新生成的第二消息;其中,装置还包括:第一返回单元,设置在第一层节点上,用于在重新生成的第二消息的处理结果仍为处理失败的情况下,向根节点返回第一消息处理失败的消息。

本实施例中,当第二层节点处理第二消息失败的情况下,重新生成第二消息并向第二层节点重新发送该重新生成的第二消息,以便于第二层节点对重新进行处理,如果再次处理失败,则第一层节点向根节点返回处理失败的消息。

优选地,装置还包括:第三存储单元,设置在第二层节点上,用于存储第二消息;第三处理单元,设置在第二层节点上,用于对第二消息进行处理,生成第三消息,并向第三层节点发送第三消息;第四处理单元,设置在第三层节点上,用于接收第三消息后,对第三消息进行处理,并向第二层节点返回处理结果;第三处理单元还用于在第三消息的处理结果为处理失败的情况下,第二层节点获取存储的第二消息,并重新对第二消息进行处理,重新生成第三消息,向第三层节点发送重新生成的第三消息。

若第二层节点的下游还包括第三层节点,那么第二层节点对第二消息进行处理,并生成第三消息,将其发送至第三层节点。在第三层节点对第三消息处理失败的情况下,则由第二层节点获取第二消息,并重新生成第三消息并重传,以便于第三层节点重新处理。这样,当第三层节点处理失败时,无需从根节点开始重复处理,只需从第二层节点重新处理第二消息,大大提高了在出现差错的情况下消息处理的效率。

优选地,装置还包括:第二返回单元,设置在第二层节点上,用于在重新生成的第三消息的处理结果仍为处理失败的情况下,向第一层节点返回第二消息处理失败的消息。

如果第三消息重新处理第三消息后,处理结果仍为处理失败,则由第二层节点向第一层节点返回处理失败的消息。这使得在消息处理失败时,通过层层上报,最终才到根节点处。

本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:

步骤S1,第一层节点接收第一消息,并存储第一消息;

步骤S2,第一层节点对第一消息进行处理,生成第二消息,并向第二层节点发送第二消息;

步骤S3,第二层节点接收第二消息后,对第二消息进行处理,并向第一层节点返回处理结果;

步骤S4,在处理结果为处理失败的情况下,第一层节点获取存储的第一消息,并重新对第一消息进行处理。

通过上述代码,在第二层节点对第二消息处理失败的情况下,由第一层节点获取预 先存储的第一消息,并重新对第一消息进行处理,以便于重新生成第二消息发送给第二层节点,第二层节点则可以对重新生成的第二消息进行处理,无需从根节点对消息重新进行重复处理,解决了在出现差错的情况下消息处理的效率低的问题,提高了在出现差错的情况下消息处理的效率。

可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

可选地,在本实施例中,处理器根据存储介质中已存储的程序代码执行:第一层节点接收第一消息,并存储第一消息;第一层节点对第一消息进行处理,生成第二消息,并向第二层节点发送第二消息;第二层节点接收第二消息后,对第二消息进行处理,并向第一层节点返回处理结果;在处理结果为处理失败的情况下,第一层节点获取存储的第一消息,并重新对第一消息进行处理。

可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。

显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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