本申请涉及数据处理技术领域,特别是涉及一种基于消息队列的多用途数据接收方法及系统、计算机设备、可读存储介质。
背景技术:
现有技术在由多个服务组成的软件系统中,服务间通常需要进行信息交换以保证数据互通。数据交换的一种常用技术为消息队列中间件技术,这种技术保证将发送方的消息至少一次送达到接收端,服务端只能持续接收消息。这样容易造成消息重复和处理不必要消息占用能耗的问题。
即现有技术的消息队列中间件技术为了保证消息的送达,通常被设计为队单条消息至少发送一次消息。这一问题导致消息的接收方必须设计为幂等服务,即多条同样内容的消息多次执行对系统的影响完全一致。这种幂等性的设计为服务实现带来极大困难,容易造成消息重复和处理不必要消息占用能耗的问题。
因此,现有技术有待改进。
技术实现要素:
本发明要解决的技术问题是,提供一种基于消息队列的多用途数据接收方法及系统、计算机设备、可读存储介质,本发明提出了一种基于消息队列的多用途数据接收方法,通过消息去重和可抛弃模型解决上述消息重复和处理不必要消息占用能耗的问题。
一种基于消息队列的多用途数据接收方法,其中,所述方法包括:
为本地服务需要的消息创建处理记录,以及为本地服务需要的消息按照类型创建可变缓存或长度固定的缓存;
接收消息时根据消息id判断消息是否为已处理或处理中状态,如果该消息id与本地处理记录有重复,则判断其为重复消息,直接抛弃;
当消息id与本地处理记录没有重复则判断消息是否为可抛弃数据类型,当消息为不可抛弃数据类型时,由接收端存入所述可变缓存中以供后台服务使用;
当消息为可抛弃类型,判断当前是否存在正在处理的消息,如果当前后台服务正在处理数据,将数据缓存进所述长度固定的缓存中,并由后来的数据进行覆盖,控制缓存的数据为最新的数据。
所述基于消息队列的多用途数据接收方法,其中,所述为本地服务需要的消息创建处理记录,以及为本地服务需要的消息按照类型创建可变缓存或长度固定的缓存的步骤之前包括:
预先将消息数据根据业务分为:需要持续处理每一条数据过程的过程有用性数据,以及为仅对短期结果处理的短期结果有用性数据;
根据不同类型的消息数据配置为可抛弃数据或不可抛弃数据;将短期结果有用性数据配置为可抛弃,将过程有用性数据配置为不可抛弃数据。
所述基于消息队列的多用途数据接收方法,其中,所述为本地服务需要的消息创建处理记录,以及为本地服务需要的消息按照类型创建可变缓存或长度固定的缓存的步骤包括:
当消息队列启动,获取服务需要的消息类型个数;
判断是否已为每个消息创建处理记录和缓存;
当没有则创建该类型消息处理记录,通过消息的id登记消息处理记录;并为本地服务需要的消息按照类型创建可变缓存或长度为1的缓存。
所述基于消息队列的多用途数据接收方法,其中,所述接收消息时根据消息id判断消息是否为已处理或处理中状态,如果该消息id与本地处理记录有重复,则判断其为重复消息,直接抛弃的步骤包括:
为消息创建一个id,用于在消息的接收方使用消息处理记录对每条处理过的消息进行记录;
当收到新消息时新消息的id和记录中进行比对,如果该消息id与本地处理记录有重复,则判断其为重复消息,直接抛弃。
所述基于消息队列的多用途数据接收方法,其中,所述当消息id与本地处理记录没有重复则判断消息是否为可抛弃数据类型,当消息为不可抛弃数据类型时,由接收端存入所述可变缓存中以供后台服务使用的步骤还包括:
判断消息是否为可抛弃类型,如果不是可抛弃,进入消息处理流程。
所述基于消息队列的多用途数据接收方法,其中,所述当消息为可抛弃类型,判断当前是否存在正在处理的消息,如果当前后台服务正在处理数据,将数据缓存进所述长度固定的缓存中,并由后来的数据进行覆盖,控制缓存的数据为最新的数据的步骤还包括:
如果当消息为可抛弃类型,判断当前是否存在正在处理的消息,如果存在正在处理,抛弃该消息;如果当前无正在处理,进入消息处理流程。
一种基于消息队列的多用途数据接收系统,其中,所述系统包括:
创建模块,用于为本地服务需要的消息创建处理记录,以及为本地服务需要的消息按照类型创建可变缓存或长度固定的缓存;
除重处理模块,用于接收消息时根据消息id判断消息是否为已处理或处理中状态,如果该消息id与本地处理记录有重复,则判断其为重复消息,直接抛弃;
不可抛弃处理模块,用于当消息id与本地处理记录没有重复则判断消息是否为可抛弃数据类型,当消息为不可抛弃数据类型时,由接收端存入所述可变缓存中以供后台服务使用;
可抛弃处理模块,用于当消息为可抛弃类型,判断当前是否存在正在处理的消息,如果当前后台服务正在处理数据,将数据缓存进所述长度固定的缓存中,并由后来的数据进行覆盖,控制缓存的数据为最新的数据。
所述的基于消息队列的多用途数据接收系统,其中,还包括:
预先设置模块,用于预先将消息数据根据业务分为:需要持续处理每一条数据过程的过程有用性数据,以及为仅对短期结果处理的短期结果有用性数据;
配置模块,用于根据不同类型的消息数据配置为可抛弃数据或不可抛弃数据;将短期结果有用性数据配置为可抛弃,将过程有用性数据配置为不可抛弃数据。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其中,所述处理器执行所述计算机程序时实现任一项所述基于消息队列的多用途数据接收方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现任一项所述基于消息队列的多用途数据接收方法的步骤。
与现有技术相比,本发明实施例具有以下优点:
本发明实施方式提供一种基于消息队列的多用途数据接收方法;本发明将数据根据其业务可以分为两种,一种为需要持续处理每一条数据的过程有用性数据,如股票价格,另一种为仅对短期结果处理的结果有用性数据,如室内温度。根据不同类型的消息提供可抛弃、不可抛弃配置,当配置为不可抛弃类型时,由接收端建立可变长度的缓存进行存储供后台服务使用。当配置为可抛弃类型时,如果当前后台服务正在处理数据,将数据缓存进长度为1的缓存中,并由后来的数据进行覆盖,保证缓存的数据为最新的数据。这种可抛弃模型可以针对不同类型的数据进行处理,提高了后台服务的性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中一种基于消息队列的多用途数据接收方法的流程示意图。
图2为本发明实施例中一种基于消息队列的多用途数据接收方法的具体应用实施例流程示意图。
图3为本发明实施例中一种基于消息队列的多用途数据接收系统的结构示意图。
图4为本发明实施例中计算机设备的内部结构图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
发明人经过研究发现,现有技术中现有的消息队列中间件技术为了保证消息的送达,通常被设计为队单条消息至少发送一次消息。这一问题导致消息的接收方必须设计为幂等服务,即多条同样内容的消息多次执行对系统的影响完全一致。这种幂等性的设计为服务实现带来极大困难。
为了解决上述问题,在本发明实施例中,一种基于消息队列的多用途数据接收方法;通过消息去重技术解决了重复消息的问题,保证接收方仅接收一次消息,去除了因重复消息带来的复杂设计。
本发明方法特别适用于使用冷热备份以提高系统可用性的技术方案。
下面结合附图,详细说明本发明的各种非限制性实施方式。
请参阅图1,图1示出了本发明实施例的基于消息队列的多用途数据接收方法,如图1所示,本发明实施例所述方法包括:
步骤s100、预先将消息数据根据业务分为:需要持续处理每一条数据过程的过程有用性数据,以及为仅对短期结果处理的短期结果有用性数据。
本发明实施例中,预先将消息数据根据其业务可以分为两种,一种为需要持续处理每一条数据的过程有用性数据,如股票价格,另一种为仅对短期结果处理的结果有用性数据,如室内温度。
步骤s200、根据不同类型的消息数据配置为可抛弃数据或不可抛弃数据;将短期结果有用性数据配置为可抛弃,将过程有用性数据配置为不可抛弃数据。
本发明实施例中,根据不同类型的消息提供可抛弃、不可抛弃配置,当配置为不可抛弃类型时,用于由接收端建立可变长度的缓存进行存储供后台服务使用。当配置为可抛弃类型时,用于如果当前后台服务正在处理数据,将数据缓存进长度为1的缓存中,并由后来的数据进行覆盖,保证缓存的数据为最新的数据。
步骤s300、为本地服务需要的消息创建处理记录,以及为本地服务需要的消息按照类型创建可变缓存或长度固定的缓存;
本发明中当消息队列启动,获取服务需要的消息类型个数;判断是否已为每个消息创建处理记录和缓存;当没有则创建该类型消息处理记录,通过消息的id登记消息处理记录;并为本地服务需要的消息按照类型创建可变缓存或长度为1的缓存。
步骤s400、接收消息时根据消息id判断消息是否为已处理或处理中状态,如果该消息id与本地处理记录有重复,则判断其为重复消息,直接抛弃;
本发明中可以为消息创建一个id,用于在消息的接收方使用消息处理记录对每条处理过的消息进行记录;当收到新消息时新消息的id和记录中进行比对,如果该消息id与本地处理记录有重复,则判断其为重复消息,直接抛弃。
步骤s500、当消息id与本地处理记录没有重复则判断消息是否为可抛弃数据类型,当消息为不可抛弃数据类型时,由接收端存入所述可变缓存中以供后台服务使用;
本申请中,为了消息去重,对每个消息创建一个id,在消息的接收方使用消息处理记录对每条处理过的消息进行记录。当收到新消息时新消息的id和记录中进行比对,从而抛弃重复发送的无用消息。
其中,所述当消息id与本地处理记录没有重复则判断消息是否为可抛弃数据类型,当消息为不可抛弃数据类型时,由接收端存入所述可变缓存中以供后台服务使用的步骤还包括:
判断消息是否为可抛弃类型,如果不是可抛弃,进入消息处理流程。
步骤s600、当消息为可抛弃类型,判断当前是否存在正在处理的消息,如果当前后台服务正在处理数据,将数据缓存进所述长度固定的缓存中,并由后来的数据进行覆盖,控制缓存的数据为最新的数据。
本发明实施例中,将消息定义为可抛弃和不可抛弃两种类型。可抛弃类型,如公司人员数量这种消息只需要获取到多个消息中的消息内容,可以设置为可抛弃类型,通过抛弃中间的消息达到减少处理次数,提高服务运行效率的目的。不可抛弃类型,如股票价格曲线,需要根据这些中间消息构建曲线,需要设计为不可抛弃模型。这两种类型根据不通的业务需求可以自行配置。
在一种实施方式中,所述基于消息队列的多用途数据接收方法,其中,所述当消息为可抛弃类型,判断当前是否存在正在处理的消息,如果当前后台服务正在处理数据,将数据缓存进所述长度固定的缓存中,并由后来的数据进行覆盖,控制缓存的数据为最新的数据的步骤还包括:
如果当消息为可抛弃类型,判断当前是否存在正在处理的消息,如果存在正在处理,抛弃该消息;如果当前无正在处理,进入消息处理流程。
本发明方法可以用于消息去重,降低后台服务设计难度。使用不可抛弃类型的缓存可以缓存消息,降低消息丢失的可能性。使用抛弃类型可以减少消息处理数量,提高服务性能
以下通过一具体应用实施例对本发明方法做进一步详细说明:
如图2所示,本发明具体应用实施例提供的一种基于消息队列的多用途数据接收方法,包括以下步骤:
s10、开始;进入步骤s11;
s11、消息队列启动;并进入步骤s12;
s12、获取服务需要的消息类型个数;并进入步骤s13;
s13、判断是否已为每个消息创建处理记录和缓存;当是则跳到步骤s18,当否则进入步骤s14;
本发明中为本地服务需要的消息创建处理记录;
s14、创建该类型消息处理记录;
本发明实施例中为本地服务需要的消息按照类型创建可变缓存或长度为1的缓存。
s15、判断是否为可抛弃类型;当是则进入步骤s16;当否则进入步骤s17;
s16、创建该类型消息缓存并设置缓存个数为1;并进入s18;
s17、创建该类型消息缓存,并进入s18;
s18、消息队列接收消息,进入s19;
s19、判读消息id是否在为已处理或处理中状态,当为是则跳到步骤s24,当为否则进入步骤s20;
本发明中接收消息时根据消息id判断消息是否为已处理或处理中状态,如果该id与本地处理记录有重复,则判断其为重复消息,直接抛弃。
s20、判断消息是否为可抛弃,当为否则进入步骤s22,当为是则进入步骤s21;
本申请中,判断消息是否为可抛弃类型,如果不是可抛弃,进入消息处理流程。
s21、判断是否存在正在处理中的消息,当是则进入步骤s23,当否则进入步骤s22;
本申请中如果为可抛弃类型,判断当前是否存在正在处理的消息,如果存在正在处理,抛弃该消息。如果当前无正在处理,进入消息处理流程。
s22、服务处理消息,并进入步骤s24;
s23、抛弃消息,并进入步骤s24;
s24、结束。
由上可见,本发明方法中将数据根据其业务可以分为两种,一种为需要持续处理每一条数据的过程有用性数据,如股票价格,另一种为仅对短期结果处理的结果有用性数据,如室内温度。根据不同类型的消息提供可抛弃、不可抛弃配置,当配置为不可抛弃类型时,由接收端建立可变长度的缓存进行存储供后台服务使用。当配置为可抛弃类型时,如果当前后台服务正在处理数据,将数据缓存进长度为1的缓存中,并由后来的数据进行覆盖,保证缓存的数据为最新的数据。这种可抛弃模型可以针对不同类型的数据进行处理,提高了后台服务的性能。
在一个实施例中,本发明提供了一种基于消息队列的多用途数据接收系统,如图3所示,所述系统包括:
预先设置模块41,用于预先将消息数据根据业务分为:需要持续处理每一条数据过程的过程有用性数据,以及为仅对短期结果处理的短期结果有用性数据;
配置模块42,用于根据不同类型的消息数据配置为可抛弃数据或不可抛弃数据;将短期结果有用性数据配置为可抛弃,将过程有用性数据配置为不可抛弃数据;
创建模块43,用于为本地服务需要的消息创建处理记录,以及为本地服务需要的消息按照类型创建可变缓存或长度固定的缓存;
除重处理模块44,用于接收消息时根据消息id判断消息是否为已处理或处理中状态,如果该消息id与本地处理记录有重复,则判断其为重复消息,直接抛弃;
不可抛弃处理模块45,用于当消息id与本地处理记录没有重复则判断消息是否为可抛弃数据类型,当消息为不可抛弃数据类型时,由接收端存入所述可变缓存中以供后台服务使用;
可抛弃处理模块46,用于当消息为可抛弃类型,判断当前是否存在正在处理的消息,如果当前后台服务正在处理数据,将数据缓存进所述长度固定的缓存中,并由后来的数据进行覆盖,控制缓存的数据为最新的数据;具体如上所述。
在一个实施例中,本发明提供了一种计算机设备,该设备可以是终端,内部结构如图4所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入系统。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种自然语言模型的生成方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入系统可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图4所示的仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本发明实施例提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
预先将消息数据根据业务分为:需要持续处理每一条数据过程的过程有用性数据,以及为仅对短期结果处理的短期结果有用性数据;
根据不同类型的消息数据配置为可抛弃数据或不可抛弃数据;将短期结果有用性数据配置为可抛弃,将过程有用性数据配置为不可抛弃数据;
为本地服务需要的消息创建处理记录,以及为本地服务需要的消息按照类型创建可变缓存或长度固定的缓存;
接收消息时根据消息id判断消息是否为已处理或处理中状态,如果该消息id与本地处理记录有重复,则判断其为重复消息,直接抛弃;
当消息id与本地处理记录没有重复则判断消息是否为可抛弃数据类型,当消息为不可抛弃数据类型时,由接收端存入所述可变缓存中以供后台服务使用;
当消息为可抛弃类型,判断当前是否存在正在处理的消息,如果当前后台服务正在处理数据,将数据缓存进所述长度固定的缓存中,并由后来的数据进行覆盖,控制缓存的数据为最新的数据;具体如上所述。
综上所述,与现有技术相比,本发明实施例具有以下优点:
本发明实施方式提供一种基于消息队列的多用途数据接收方法及系统、计算机设备、可读存储介质;所述方法包括为本地服务需要的消息创建处理记录,以及为本地服务需要的消息按照类型创建可变缓存或长度固定的缓存;接收消息时根据消息id判断消息是否为已处理或处理中状态,如果该消息id与本地处理记录有重复,则判断其为重复消息,直接抛弃;当消息id与本地处理记录没有重复则判断消息是否为可抛弃数据类型,当消息为不可抛弃数据类型时,由接收端存入所述可变缓存中以供后台服务使用;当消息为可抛弃类型,判断当前是否存在正在处理的消息,如果当前后台服务正在处理数据,将数据缓存进所述长度固定的缓存中,并由后来的数据进行覆盖,控制缓存的数据为最新的数据。
本发明将数据根据其业务可以分为两种,一种为需要持续处理每一条数据的过程有用性数据,如股票价格,另一种为仅对短期结果处理的结果有用性数据,如室内温度。根据不同类型的消息提供可抛弃、不可抛弃配置,当配置为不可抛弃类型时,由接收端建立可变长度的缓存进行存储供后台服务使用。当配置为可抛弃类型时,如果当前后台服务正在处理数据,将数据缓存进长度为1的缓存中,并由后来的数据进行覆盖,保证缓存的数据为最新的数据。这种可抛弃模型可以针对不同类型的数据进行处理,提高了后台服务的性能。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明申请范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。