一种基于Lua脚本语言的消息处理方法及系统与流程

文档序号:14940780发布日期:2018-07-13 20:41阅读:342来源:国知局

本发明涉及lua数据处理技术领域,特别是涉及一种基于lua脚本语言的消息处理方法及系统。



背景技术:

现有技术中在消息处理过程一般是由kafka等消息队列中间件作为数据接收与存储端,消息处理指的是从kafka等消息队列中间件中获取数据,做相应的数据处理后将结果存储到相应的存储中。现有技术中对于每个消息处理业务都需要实现:从kafka等消息队列中获取取数据、相应处理数据、将数据存储到对应存储、提供对应api(applicationprograminterface,应用程序接口)获取处理数据等几个步骤。对于大部分需求可能仅仅是在处理数据方式上和数据返回方式是有所不同,其他几个步骤基本一致。

如上介绍的现有技术采用每个消息处理业务都实现从消息队列中间件中获取数据、处理数据、返回处理结果等几个过程,由于每个处理业务都有自己的一些业务逻辑特点,没有办法抽象复用模块,所以导致在消息处理业务方面代码复用性、可扩展性差,增加开发成本。另外一个是现有技术在消息处理方面使用静态编译语言在开发和部署升级上面效率比较低,开发维护成本高。而且,在处理过程中,由于处理过程出现异常情况,导致数据丢失,使得数据处理安全度比较低。

在实现本发明过程中,发明人发现现有技术中至少存在如下问题:

在消息处理方面使用静态编译语言的过程中,数据容易丢失,使得数据处理不安全。



技术实现要素:

本发明实施例提供一种基于lua脚本语言的消息处理方法及系统,可提高数据处理的安全性。

一方面,本发明实施例提供了一种基于lua脚本语言的消息处理方法,包括:

采用静态编译语言,从消息中间件中获取原始数据,并将获取到的原始数据暂存到内存队列中,其中,所述内存队列中封装有多组数据信息,每组数据信息包括相对应的原始数据、获取消息的应用程序接口以及数据回滚接口;

从所述内存队列中调取数据信息,并将调取的数据信息从所述内存队列中删除;

采用lua脚本语言,通过调取的数据信息中的应用程序接口对调取的数据信息中的原始数据进行数据处理;

如果数据处理成功,则将数据处理得到的结果数据存储;如果数据处理失败,则通过调取的数据信息中的数据回滚接口将原始数据回滚到所述内存队列中。

可选的,所述采用lua脚本语言,通过调取的数据信息中的应用程序接口对调取的数据信息中的原始数据进行数据处理,具体包括:

将调取的数据信息中的原始数据、应用程序接口及数据回滚接口绑定到lua虚拟机解析器上;

通过lua数据处理程序调用所述应用程序接口,对所述lua虚拟机解析器上绑定的原始数据进行数据处理。

可选的,各原始数据均具有唯一的身份识别标识,

所述通过调取的数据信息中的数据回滚接口将原始数据回滚到所述内存队列中,具体包括:

通过所述原始数据对应的数据回滚接口,将原始数据的身份识别标识回滚到所述内存队列中;

根据所述身份识别标识,重新从消息中间件中获取对应的原始数据,并将重新获取的原始数据暂存到所述内存队列中。

可选的,还包括:

监控所述内存队列中各原始数据的当前数量;

判断所述当前数量是否达到数量阈值;

如果达到则停止从消息中间件中获取原始数据;否则继续监控。

另一方面,本发明实施例提供了一种基于lua脚本语言的消息处理系统,包括:

获取单元,用于采用静态编译语言,从消息中间件中获取原始数据,并将获取到的原始数据暂存到内存队列中,其中,所述内存队列中封装有多组数据信息,每组数据信息包括相对应的原始数据、获取消息的应用程序接口以及数据回滚接口;

调取单元,用于从所述内存队列中调取数据信息,并将调取的数据信息从所述内存队列中删除;

处理单元,用于采用lua脚本语言,通过调取的数据信息中的应用程序接口对调取的数据信息中的原始数据进行数据处理;

存储单元,与所述处理单元连接,用于在所述处理单元数据处理成功时,将数据处理得到的结果数据存储;

回滚单元,与所述处理单元连接,用于在所述处理单元数据处理失败时,通过调取的数据信息中的数据回滚接口将原始数据回滚到所述内存队列中。

可选的,所述处理单元包括:

第一绑定模块,用于将调取的数据信息中的原始数据、应用程序接口及数据回滚接口绑定到lua虚拟机解析器上;

第一处理模块,用于通过lua数据处理程序调用所述应用程序接口,对所述lua虚拟机解析器上绑定的原始数据进行数据处理。

可选的,各原始数据均具有唯一的身份识别标识;

所述回滚单元包括:

回滚模块,用于通过所述原始数据对应的数据回滚接口,将原始数据的身份识别标识回滚到所述内存队列中;

重新获取模块,用于根据所述身份识别标识,重新从消息中间件中获取对应的原始数据,并将重新获取的原始数据暂存到所述内存队列中。

可选的,还包括流量监控单元;其中,

所述流量监控单元包括:

监控模块,用于监控所述内存队列中各原始数据的当前数量;

判断模块,与所述监控模块连接,用于判断所述当前数量是否达到数量阈值;

所述获取单元与所述判断模块连接,所述获取单元还用于在所述判断模块的判断结果为达到数量阈值时,停止从消息中间件中获取原始数据;

所述监控模块还用于在所述判断模块的判断结果为未达到数量阈值时继续监控。

本发明还提供了一种基于lua脚本语言的消息处理系统,包括:

处理器;以及

被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行以下操作:

采用静态编译语言,从消息中间件中获取原始数据,并将获取到的原始数据暂存到内存队列中,其中,所述内存队列中封装有多组数据信息,每组数据信息包括相对应的原始数据、获取消息的应用程序接口以及数据回滚接口;

从所述内存队列中调取数据信息,并将调取的数据信息从所述内存队列中删除;

采用lua脚本语言,通过调取的数据信息中的应用程序接口对调取的数据信息中的原始数据进行数据处理;

如果数据处理成功,则将数据处理得到的结果数据存储;如果数据处理失败,则通过调取的数据信息中的数据回滚接口将原始数据回滚到所述内存队列中。

本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行以下操作:

采用静态编译语言,从消息中间件中获取原始数据,并将获取到的原始数据暂存到内存队列中,其中,所述内存队列中封装有多组数据信息,每组数据信息包括相对应的原始数据、获取消息的应用程序接口以及数据回滚接口;

从所述内存队列中调取数据信息,并将调取的数据信息从所述内存队列中删除;

采用lua脚本语言,通过调取的数据信息中的应用程序接口对调取的数据信息中的原始数据进行数据处理;

如果数据处理成功,则将数据处理得到的结果数据存储;如果数据处理失败,则通过调取的数据信息中的数据回滚接口将原始数据回滚到所述内存队列中。

上述技术方案具有如下有益效果:本发明通过从消息中间件中获取原始数据,并暂存到内存队列中,内存队列中封装有多组数据信息,每组数据信息包括相对应的原始数据、获取消息的应用程序接口以及数据回滚接口;从内存队列中调取数据信息,采用lua脚本语言,通过调取的数据信息中的应用程序接口对调取的数据信息中的原始数据进行数据处理;如果数据处理失败,则通过调取的数据信息中的数据回滚接口将原始数据回滚到所述内存队列中,从而确保数据不丢失。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明基于lua脚本语言的消息处理方法的流程图;

图2是本发明基于lua脚本语言的消息处理系统的模块结构示意图;

图3为数据返回的模块结构示意图。

符号说明:

获取单元—1,调取单元—2,处理单元—3,存储单元—4,回滚单元—5。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的目的是提供一种基于lua脚本语言的消息处理方法,通过从消息中间件中获取原始数据,并暂存到内存队列中,内存队列中封装有多组数据信息,每组数据信息包括相对应的原始数据、获取消息的应用程序接口以及数据回滚接口;从内存队列中调取数据信息,采用lua脚本语言,通过调取的数据信息中的应用程序接口对调取的数据信息中的原始数据进行数据处理;如果数据处理失败,则通过调取的数据信息中的数据回滚接口将原始数据回滚到所述内存队列中,从而确保数据不丢失。

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

如图1所示,本发明基于lua脚本语言的消息处理方法包括:

步骤100:采用静态编译语言,从消息中间件中获取原始数据,并将获取到的原始数据暂存到内存队列中。

其中,所述内存队列中封装有多组数据信息,每组数据信息包括相对应的原始数据、获取消息的应用程序接口以及数据回滚接口。

步骤200:从所述内存队列中调取数据信息,并将调取的数据信息从所述内存队列中删除。

步骤300:采用lua脚本语言,通过调取的数据信息中的应用程序接口对调取的数据信息中的原始数据进行数据处理,并在数据处理成功时执行步骤400,在数据处理失败时执行步骤500。其中,lua脚本语言为定制化语言。

步骤400:将数据处理得到的结果数据存储。

步骤500:通过调取的数据信息中的数据回滚接口将原始数据回滚到所述内存队列中。

在步骤300中,所述采用lua脚本语言,通过调取的数据信息中的应用程序接口对调取的数据信息中的原始数据进行数据处理,具体包括:

步骤301:将调取的数据信息中的原始数据、应用程序接口api及数据回滚接口绑定到lua虚拟机解析器上;

步骤302:通过lua数据处理程序调用所述应用程序接口api,对所述lua虚拟机解析器上绑定的原始数据进行数据处理。

在步骤400将数据处理得到的结果数据存储的过程中,可通过内置的一个kv(key-value,重要价值)存储模块存储处理后的数据,也可通过lua的第三方数据库将数据存储到其他的存储设备中。

其中,各原始数据均具有唯一的身份识别标识,例如,id(identification,身份)。

在步骤500中,所述通过调取的数据信息中的数据回滚接口将原始数据回滚到所述内存队列中,具体包括:

步骤501:通过所述原始数据对应的数据回滚接口,将原始数据的身份识别标识回滚到所述内存队列中。

步骤502:根据所述身份识别标识,重新从消息中间件中获取对应的原始数据,并将重新获取的原始数据暂存到所述内存队列中。

为防止内存队列在处理数据异常的情况下无限制的增大,本发明基于lua脚本语言的消息处理方法还包括:

监控所述内存队列中各原始数据的当前数量;

判断所述当前数量是否达到数量阈值;如果达到则停止从消息中间件中获取原始数据;否则继续监控。

此外,为保证数据的安全性,本发明基于lua脚本语言的消息处理方法还包括:

当lua虚拟机解析器异常时,通过所述数据回滚接口将原始数据自动回滚到内存队列中;

当消息处理服务整体停止时,将所有的内存队列中的数据信息写入到本地磁盘,供再次重启重新加载,有效保证消息数据安全。

结合图3所示,本发明基于lua脚本语言的消息处理方法还包括数据返回处理(静态编译语言以c++为例)。具体的,所述数据返回处理具体包括:

通过采用静态编译语言的宿主程序端提前绑定对应存储单元(在本实施例中,所述存储单元为kv存储模块)的获取消息的应用程序接口api,以及数据统计的通用应用程序接口api,以供lua虚拟机解析器的lua程序在具体业务逻辑中使用;

基于采用静态编译语言的宿主程序端的rpc(remoteprocedurecallprotocol,远程过程调用协议)server和http(hypertexttransferprotocol,超文本传输协议)server进行路由拦截;

当宿主程序端没有请求的路由时,则调用lua虚拟机解析器的lua程序进行数据处理;

返回处理结果。

通过上述数据返回处理,可以有效的将具体的业务逻辑提取到lua脚本语言执行端中,从而可有效的增加模块的扩展性。

本发明通过将数据返回处理进行绑定可提升业务的扩展性和可维护性;通过绑定的方式可以高度抽象消息处理过程,从而可降低编码冗余。

此外,本发明还提供一种基于lua脚本语言的消息处理系统,可提高数据处理的安全性。如图2所示,本发明基于lua脚本语言的消息处理系统包括获取单元1、调取单元2、处理单元3、存储单元4及回滚单元5。

所述获取单元1用于采用静态编译语言,从消息中间件中获取原始数据,并将获取到的原始数据暂存到内存队列中。

其中,所述内存队列中封装有多组数据信息,每组数据信息包括相对应的原始数据、获取消息的应用程序接口以及数据回滚接口。

所述调取单元2用于从所述内存队列中调取数据信息,并将调取的数据信息从所述内存队列中删除。通过实时删除内存队列中的数据信息,可降低内存队列中的使用空间。

所述处理单元3用于采用lua脚本语言,通过调取的数据信息中的应用程序接口对调取的数据信息中的原始数据进行数据处理。

所述存储单元4与所述处理单元3连接,所述存储单元4用于在所述处理单元3数据处理成功时,将数据处理得到的结果数据存储。

所述回滚单元5与所述处理单元3连接,所述回滚单元5用于在所述处理单元数据处理失败时,通过调取的数据信息中的数据回滚接口将原始数据回滚到所述内存队列中。

其中,所述处理单元3包括第一绑定模块及第一处理模块。所述第一绑定模块用于将调取的数据信息中的原始数据、应用程序接口及数据回滚接口绑定到lua虚拟机解析器上;所述第一处理模块用于通过lua数据处理程序调用所述应用程序接口,对所述lua虚拟机解析器上绑定的原始数据进行数据处理。

进一步地,各原始数据均具有唯一的身份识别标识,如id。其中,所述回滚单元5包括回滚模块及重新获取模块。所述回滚模块用于通过所述原始数据对应的数据回滚接口,将原始数据的身份识别标识回滚到所述内存队列中;所述重新获取模块用于根据所述身份识别标识,重新从消息中间件中获取对应的原始数据,并将重新获取的原始数据暂存到所述内存队列中。

此外,本发明基于lua脚本语言的消息处理系统还包括流量监控单元;所述流量监控单元包括监控模块及判断模块;所监控模块用于监控所述内存队列中各原始数据的当前数量;所述判断模块与所述监控模块连接,所述判断模块用于判断所述当前数量是否达到数量阈值。

所述获取单元1与所述判断模块连接,所述获取单元1还用于在所述判断模块的判断结果为达到数量阈值时,停止从消息中间件中获取原始数据。所述监控模块还用于在所述判断模块的判断结果为未达到数量阈值时继续监控。

如图3所示,本发明基于lua脚本语言的消息处理系统还包括数据返回单元。其中,所述数据返回单元包括:

第二绑定模块,用于通过采用静态编译语言的宿主程序端提前绑定对应存储单元(在本实施例中,所述存储单元为kv存储模块)的获取消息的应用程序接口api,以及数据统计的通用应用程序接口api,以供lua虚拟机解析器的lua程序在具体业务逻辑中使用;

拦截模块,用于基于采用静态编译语言的宿主程序端的rpc(remoteprocedurecallprotocol,远程过程调用协议)server和httpserver进行路由拦截;

第二处理模块,用于当宿主程序端没有请求的路由时,调用lua虚拟机解析器的lua程序进行数据处理;

返回模块,用于返回处理结果。

通过上述数据返回处理,可以有效的将具体的业务逻辑提取到lua脚本语言执行端中,从而可有效的增加模块的扩展性。

本发明还提供一种基于lua脚本语言的消息处理系统,包括:

处理器;以及

被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行以下操作:

采用静态编译语言,从消息中间件中获取原始数据,并将获取到的原始数据暂存到内存队列中,其中,所述内存队列中封装有多组数据信息,每组数据信息包括相对应的原始数据、获取消息的应用程序接口以及数据回滚接口;

从所述内存队列中调取数据信息,并将调取的数据信息从所述内存队列中删除;

采用lua脚本语言,通过调取的数据信息中的应用程序接口对调取的数据信息中的原始数据进行数据处理;

如果数据处理成功,则将数据处理得到的结果数据存储;如果数据处理失败,则通过调取的数据信息中的数据回滚接口将原始数据回滚到所述内存队列中。

本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行以下操作:

采用静态编译语言,从消息中间件中获取原始数据,并将获取到的原始数据暂存到内存队列中,其中,所述内存队列中封装有多组数据信息,每组数据信息包括相对应的原始数据、获取消息的应用程序接口以及数据回滚接口;

从所述内存队列中调取数据信息,并将调取的数据信息从所述内存队列中删除;

采用lua脚本语言,通过调取的数据信息中的应用程序接口对调取的数据信息中的原始数据进行数据处理;

如果数据处理成功,则将数据处理得到的结果数据存储;如果数据处理失败,则通过调取的数据信息中的数据回滚接口将原始数据回滚到所述内存队列中。

相对于现有技术,本发明基于lua脚本语言的消息处理系统、计算机可读存储介质与基于lua脚本语言的消息处理方法的有益效果相同,在此不再赘述。

应该明白,公开的过程中的步骤的特定顺序或层次是示例性方法的实例。基于设计偏好,应该理解,过程中的步骤的特定顺序或层次可以在不脱离本公开的保护范围的情况下得到重新安排。所附的方法权利要求以示例性的顺序给出了各种步骤的要素,并且不是要限于所述的特定顺序或层次。

在上述的详细描述中,各种特征一起组合在单个的实施方案中,以简化本公开。不应该将这种公开方法解释为反映了这样的意图,即,所要求保护的主题的实施方案需要比清楚地在每个权利要求中所陈述的特征更多的特征。相反,如所附的权利要求书所反映的那样,本发明处于比所公开的单个实施方案的全部特征少的状态。因此,所附的权利要求书特此清楚地被并入详细描述中,其中每项权利要求独自作为本发明单独的优选实施方案。

为使本领域内的任何技术人员能够实现或者使用本发明,上面对所公开实施例进行了描述。对于本领域技术人员来说;这些实施例的各种修改方式都是显而易见的,并且本文定义的一般原理也可以在不脱离本公开的精神和保护范围的基础上适用于其它实施例。因此,本公开并不限于本文给出的实施例,而是与本申请公开的原理和新颖性特征的最广范围相一致。

上文的描述包括一个或多个实施例的举例。当然,为了描述上述实施例而描述部件或方法的所有可能的结合是不可能的,但是本领域普通技术人员应该认识到,各个实施例可以做进一步的组合和排列。因此,本文中描述的实施例旨在涵盖落入所附权利要求书的保护范围内的所有这样的改变、修改和变型。此外,就说明书或权利要求书中使用的术语“包含”,该词的涵盖方式类似于术语“包括”,就如同“包括,”在权利要求中用作衔接词所解释的那样。此外,使用在权利要求书的说明书中的任何一个术语“或者”是要表示“非排它性的或者”。

本领域技术人员还可以了解到本发明实施例列出的各种说明性逻辑块(illustrativelogicalblock),单元,和步骤可以通过电子硬件、电脑软件,或两者的结合进行实现。为清楚展示硬件和软件的可替换性(interchangeability),上述的各种说明性部件(illustrativecomponents),单元和步骤已经通用地描述了它们的功能。这样的功能是通过硬件还是软件来实现取决于特定的应用和整个系统的设计要求。本领域技术人员可以对于每种特定的应用,可以使用各种方法实现所述的功能,但这种实现不应被理解为超出本发明实施例保护的范围。

本发明实施例中所描述的各种说明性的逻辑块,或单元都可以通过通用处理器,数字信号处理器,专用集成电路(asic),现场可编程门阵列或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。

本发明实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件模块、或者这两者的结合。软件模块可以存储于ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、可移动磁盘、cd-rom或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于asic中,asic可以设置于用户终端中。可选地,处理器和存储媒介也可以设置于用户终端中的不同的部件中。

在一个或多个示例性的设计中,本发明实施例所描述的上述功能可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与电脑可读的媒介上,或以一个或多个指令或代码形式传输于电脑可读的媒介上。电脑可读媒介包括电脑存储媒介和便于使得让电脑程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的电脑可读媒体可以包括但不限于ram、rom、eeprom、cd-rom或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊电脑、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何连接都可以被适当地定义为电脑可读媒介,例如,如果软件是从一个网站站点、服务器或其它远程资源通过一个同轴电缆、光纤电缆、双绞线、数字用户线(dsl)或以例如红外、无线和微波等无线方式传输的也被包含在所定义的电脑可读媒介中。所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、dvd、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在电脑可读媒介中。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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