掌桥专利:专业的专利平台
掌桥专利
首页

消息管理方法、装置、存储介质及计算机设备

文献发布时间:2023-06-19 10:32:14


消息管理方法、装置、存储介质及计算机设备

技术领域

本申请涉及计算机技术领域,尤其涉及一种消息管理方法、装置、存储介质及计算机设备。

背景技术

NATS是一个轻量级且高效的消息队列系统。但是待发送的消息只能加入到消息队列的队尾,因此消息进入消息队列后无法进行操作和管理。在分布式场景中,假设我们的消息支持纠错功能,当前一条消息发送之后,发现消息的内容有错误,但是在此情况下,每个时间段都有大量的消息在进行发送或消费,如果直接将纠错消息发送到消息队列中,再等待队列将其发送出去,那么系统数据的更新就会有一定的延迟性。这样会导致如果发现某个或某些消息的内容有错误,不能对其进行及时纠正,从而导致系统数据更新不及时甚至错误。

发明内容

为了解决上述消息不能及时纠正的技术问题,本申请实施例提供了一种消息管理方法、装置、存储介质及计算机设备。

第一方面,本申请实施例提供了一种消息管理方法,该方法包括:

按照第一消息队列的出队方向获取第一消息队列中待消费消息的消息ID;

根据待消费消息的消息ID获取待消费消息对应的消息映射表;

根据待消费消息对应的消息映射表判断待消费消息是否存在插队消息;

若待消费消息存在插队消息,则消费待消费消息和待消费消息的插队消息。

可选地,消费待消费消息和待消费消息的插队消息,包括;

消费待消费消息后,消费待消费消息的插队消息。

可选地,消息映射表包括消息管理表;

在按照第一消息队列的出队方向获取第一消息队列中待消费消息的消息ID之前,方法还包括:

对第一消息队列中每个进队消息分别建立对应的消息管理表,消息管理表存储有对应进队消息的消息ID和消息编码;

获取插队消息,确定第一消息队列中插队消息所对应的被插队消息;

判断被插队消息是否处于第一消息队列的队尾;

若被插队消息不处于第一消息队列的队尾,则对插队消息的消息内容进行编码处理得到子消息编码;

将插队消息的子消息编码存储到被插队消息对应的消息管理表中。

可选地,若被插队消息处于第一消息队列的队尾,且第一消息队列未满,则将插队消息加入到第一消息队列中被插队消息之后。

可选地,对第一消息队列中每个进队的消息分别建立对应的消息管理表,包括:

分别获取第一消息队列中每个进队消息的消息ID和消息内容;

分别对每个进队消息的消息内容进行编码处理得到对应的消息编码;

根据消息ID和消息编码分别建立第一消息队列中每个进队消息的消息管理表。

可选地,将插队消息的子消息编码存储到被插队消息对应的消息管理表中,包括:

判断被插队消息对应的消息管理表中已存储的子消息编码数量是否达到最大允许存储量;

若被插队消息对应的消息管理表中已存储的子消息编码数量未达到最大允许存储量,则将插队消息的子消息编码按照先后顺序存储到被插队消息对应的消息管理表中的目标位置。

可选地,在对插队消息的消息内容进行编码处理得到子消息编码之后,该方法还包括:

若被插队消息对应的消息管理表中已存储的子消息编码数量已达到最大允许存储量,则获取第一消息队列中位于被插队消息之后,且,对应的消息管理表中已存储的子消息编码数量未达到最大允许存储量的候补被插队消息;

将插队消息的子消息编码按照先后顺序存储到候补被插队消息对应的消息管理表中的目标位置。

可选地,根据待消费消息对应的消息映射表判断待消费消息是否存在插队消息,包括:

根据待消费消息对应的消息管理表判断待消费消息是否存在插队消息。

可选地,消息映射表还包括消息操作表;

根据待消费消息对应的消息映射表判断待消费消息是否存在插队消息,包括:

获取待消费消息对应的消息操作表中的插队状态以判断待消费消息是否存在插队消息;

若插队状态为有效,则判定待消费消息存在插队消息。

可选地,在按照第一消息队列的出队方向获取第一消息队列中待消费消息的消息ID之前,方法还包括:

对第一消息队列中每个进队消息分别建立对应的消息操作表,

消息操作表存储有对应进队消息的消息ID和插队状态,

在将插队消息的子消息编码存储到被插队消息对应的消息管理表中之后,方法还包括:

将被插队消息对应的消息操作表中的插队状态设为有效。

可选地,在若待消费消息存在插队消息,则消费待消费消息和待消费消息的插队消息之前,该方法还包括:

获取待消费消息对应的消息映射表中的撤销状态以判断待消费消息是否为待撤销消息,

若撤销状态为有效,则判定待消费消息为待撤销消息,取消消费待消费消息,

若待消费消息存在插队消息,则消费待消费消息的插队消息;

若待消费消息存在插队消息,则消费待消费消息和待消费消息的插队消息,包括:

若撤销状态为无效,则判定待消费消息不为待撤销消息,若待消费消息存在插队消息,则消费待消费消息和待消费消息的插队消息。

可选地,消息映射表包括消息操作表;

在按照第一消息队列的出队方向获取第一消息队列中待消费消息的消息ID之前,方法还包括:

对第一消息队列中的每个进队消息分别建立对应的消息操作表,

所述消息操作表存储有对应进队消息的消息ID和撤销状态,

获取撤销指令,撤销指令携带有待撤销消息的消息ID,

根据待撤销消息的消息ID和第一消息队列中进队消息的消息操作表,查找消息ID与待撤销消息的消息ID相同的进队消息作为待撤销消息,

将所述待撤销消息的消息操作表中的撤销状态设为有效。

可选地,消息映射表包括消息操作表;

在按照第一消息队列的出队方向获取第一消息队列中待消费消息的消息ID之前,方法还包括:

对第一消息队列中的每个进队消息分别建立对应的消息操作表,

消息操作表存储有对应进队消息的消息ID、消息编码和撤销状态,

获取撤销指令,撤销指令携带有待撤销消息的消息内容,

对待撤销消息的消息内容进行编码处理得到对应的撤销消息编码,

根据撤销消息编码和第一消息队列中进队消息的消息操作表,查找消息编码与撤销消息编码相同的进队消息作为待撤销消息,

将待撤销消息的消息操作表中的撤销状态设为有效。

可选地,插队消息携带有被插队消息的消息ID。

可选地,消费待消费消息和待消费消息的插队消息,包括:

对待消费消息对应的消息管理表中待消费消息的消息编码进行解码得到待消费消息内容;

通过第一消息队列将待消费消息内容发送至目标订阅者;

对待消费消息对应的消息管理表中的插队消息的子消息编码进行解码得到待消费插队消息内容;

通过第二消息队列将待消费插队消息内容发送至目标订阅者。

第二方面,本申请实施例提供了一种消息管理装置,该装置包括:

第一消息获取模块,用于按照第一消息队列的出队方向获取第一消息队列中待消费消息的消息ID;

第一查找模块,用于根据待消费消息的消息ID获取待消费消息对应的消息映射表;

第一判断模块,用于根据待消费消息对应的消息映射表判断待消费消息是否存在插队消息;

消费模块,用于若待消费消息存在插队消息,则消费待消费消息和待消费消息的插队消息。

第三方面,本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时,使得处理器执行如前面任一项的方法的步骤。

第四方面,本申请实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时执行如前面任一项的方法的步骤。

本申请实施例提供的上述技术方案与现有技术相比具有如下优点:

本申请实施例按照第一消息队列的出队方向获取第一消息队列中待消费消息的消息ID;根据待消费消息的消息ID获取待消费消息对应的消息映射表;根据待消费消息对应的消息映射表判断待消费消息是否存在插队消息;若待消费消息存在插队消息,则消费待消费消息和待消费消息的插队消息。通过本申请实现了对消息队列中的错误消息通过插队的形式进行修改和补正,且不影响其他消息的正常发送,将数据及时更新,保证系统的实时性和稳定。同时如果在队列中发现了携带错误数据的消息,可以及时将该消息撤销,保证系统的安全可靠。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。

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

图1为本申请一实施例提供的一消息管理方法的流程示意图;

图2为本申请一实施例提供的消息与消息管理表的映射关系图;

图3为本申请一实施例提供的一消息管理装置的结构框图。

具体实施方式

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

图1为本申请一实施例提供的一消息管理方法的流程示意图;参考图1,该方法包括以下步骤:

S600:按照第一消息队列的出队方向获取第一消息队列中待消费消息的消息ID。

具体地,消息队列中的进队消息是按照先进先出的顺序进行消费的。因此,进队消息排队的顺序为按照该消息队列的出队方向,先进对的消息排在队头,后进队的消息依次往后排队。

消息ID是每个消息的唯一标识或身份标识。

待消费消息为第一消息队列中当前将要消费的消息,位于第一消息队列出队方向的队头。

本申请中第一消息队列为消息传输过程中正常保存进队消息和消费消息的队列。

S700:根据待消费消息的消息ID获取待消费消息对应的消息映射表。

第一消息队列中的每个进队消息都有自己对应的消息映射表,消息映射表存储有对应进队消息的消息ID和该进队消息对应的插队消息的相关信息。

待消费消息属于第一消息队列中的进队消息。

S800:根据待消费消息对应的消息映射表判断待消费消息是否存在插队消息。

具体地,如果待消费消息对应的消息映射表中存储有插队消息的相关信息,则说明该待消费消息存在插队消息;如果待消费消息对应的消息映射表中不存在或没有存储插队消息的相关信息,则说明该待消费消息没有对应的插队消息。

S900:若待消费消息存在插队消息,则消费待消费消息和待消费消息的插队消息。

具体地,由于待消费消息和对应的插队消息对应同一个订阅者,且内容可能互斥,因此,为了避免系统紊乱,待消费消息和对应的插队消息不能同时被消费,即需要错开时间消费。

在一个具体实施例中,待消费消息和对应的插队消息在不同的消息队列中排队,先消费待消费消息后,再消费对应的插队消息。

在一个实施例中,消息映射表包括消息管理表。

在步骤S600之前,该消息管理方法还包括以下步骤:

S010:对第一消息队列中每个进队消息分别建立对应的消息管理表,消息管理表存储有对应进队消息的消息ID和消息编码。

步骤S010具体包括:

S011:分别获取第一消息队列中每个进队消息的消息ID和消息内容;

S012:分别对每个进队消息的消息内容进行编码处理得到对应的消息编码;

S013:根据消息ID和消息编码分别建立第一消息队列中每个进队消息的消息管理表。

具体地,消息队列中的进队消息是按照先进先出的顺序进行消费的。因此,进队消息排队的顺序为按照该消息队列的出队方向,先进对的消息排在队头,后进队的消息依次往后排队。

本申请中第一消息队列为消息传输过程中正常保存进队消息和消费消息的队列。第一消息队列中的进队消息可以被插队。

第一消息队列中每个进队消息都有自己对应的消息管理表,消息管理表存储有对应进队消息的消息ID和消息编码。消息管理表属于消息映射表的一部分。

消息编码是通过对对应的进队消息的消息内容进行编码处理后得到的。消息编码相当于是消息内容的另一种存储形式。消息编码由于是对消息内容经过编码处理,所以消息编码可以提高消息内容的安全性和保密性。

S020:获取插队消息,确定第一消息队列中插队消息所对应的被插队消息。

具体地,被插队消息为第一消息队列中的进队消息。插队消息是被插队消息的纠错消息,用于在消费后纠正被插队消息的部分内容,或,替代更新被插队消息的全部内容。

插队消息对应的被插队消息先被消费,插队消息后被消费。

插队消息具体是在发现之前发送的消息内容有错误的时候,生产出来的用于纠错前错误消息的纠错消息。被插队消息即为该错误消息。

S030:判断被插队消息是否处于第一消息队列的队尾。

具体地,被插队消息是第一消息队列中正常进队排队的进队消息,其在第一消息队列中可能位于队头,也可能位于队尾,还可能位于第一消息队列中间某个位置。

S040:若被插队消息不处于第一消息队列的队尾,则对插队消息的消息内容进行编码处理得到子消息编码;

S050:将插队消息的子消息编码存储到被插队消息对应的消息管理表中。

具体地,如果被插队消息不在第一消息队列的队尾,则对该被插队消息的插队消息的消息内容进行编码处理,得到该插队消息的子消息编码。子消息编码相当于是插队消息的消息内容的另一种存储形式。

当然,本申请的编码处理还可以为编码处理和加密处理,即对消息内容不仅编码而且还经过加密以得到消息编码或子消息编码。

得到的子消息编码被存储在被插队消息的消息管理表中。本申请中被插队消息和插队消息在不同的消息队列中排队。因此,插队消息不会在第一消息队列中排队,也不会影响第一消息队列中其他进队消息的正常执行进度。

因为每个进行消息进队后,在一定时间内会被快速消费掉,如果被消费后过了很久才给其发送插队消息,则没有太多意义。因此本申请每个进队消息最多可被插队的次数是有限制的,即对应的插队消息的数量有限制。具体根据实际情况设置。例如,每个进队消息对应的插队消息最大数量为1个或2个或3个等等不局限于此。

在一个实施例中,步骤S050具体包括:

S051:判断被插队消息对应的消息管理表中已存储的子消息编码数量是否达到最大允许存储量;

S052:若被插队消息对应的消息管理表中已存储的子消息编码数量未达到最大允许存储量,则将插队消息的子消息编码按照先后顺序存储到被插队消息对应的消息管理表中的目标位置。

具体地,每个进队消息能够被插队的次数是有限的,即对应的插队消息数量有限。因此,每个被插队消息对应的消息管理表中能够存储的子消息编码的存储量有限。因此,只有当被插队消息对应的消息管理表中还有剩余的存储量,插队消息的子消息编码才能够被存储在被插队消息的消息管理表中。

同时,被插队消息的消息管理表中的每个插队消息的子消息编码都是按照获取的先后顺序存储的,以保证先存储先消费。具体地,可以为消息管理表中的每个插队消息的子消息编码设置存储编码,存储编码代表了子消息编码存储的先后顺序以及消费的先后顺序。

但是为了避免重要的纠错消息因为存储量不够被过滤掉,在步骤S040之后,该方法还包括以下步骤:

S060:将插队消息的子消息编码存储到位于被插队消息之后的进队消息对应的消息管理表中。

步骤S050和S060是并列的方案,在S040之后,步骤S050和S060只能选择其中一个来执行。

步骤S060具体包括以下步骤:

S061:若被插队消息对应的消息管理表中已存储的子消息编码数量已达到最大允许存储量,则获取第一消息队列中位于被插队消息之后,且,对应的消息管理表中已存储的子消息编码数量未达到最大允许存储量的候补被插队消息;

S062:将插队消息的子消息编码按照先后顺序存储到候补被插队消息对应的消息管理表中的目标位置。

具体地,本实施例中,被插队消息不是第一消息队列中位于队尾的进队消息,因此,被插队消息后面还有其他进队消息。如果这些其他进队消息有已存储的子消息编码数量未达到其最大允许存储量,则作为候补被插队消息。

优先的,本申请选取位于被插队消息之后,且离被插队消息最近,且,对应的消息管理表中已存储的子消息编码数量未达到最大允许存储量的进队消息作为候补被插队消息。这样使得只要候补被插队消息被消费后,紧接着该插队消息就可以被消费。保证插队消息可以尽可能快的被消费。以尽快纠正被插队消息的错误。

虽然插队消息本质上不属于候补被插队消息的插队消息,但是插队消息也并不影响候补被插队消息的执行,不仅实现了资源的充分利用,同时保证了错误被及时纠正,维护了系统稳定。

在一个实施例中,该方法还包括以下步骤:

S070:若被插队消息处于第一消息队列的队尾,且第一消息队列未满,则将插队消息加入到第一消息队列中被插队消息之后。

具体地,本申请待消费消息与其插队消息被消费的时刻是紧邻的,即,待消费消息被消费后,插队消息紧接着被消费,延时不会太久,才能起到尽可能快的更正错误的目的。如果被插队消息已经是第一消息队列的最后一个进队消息了,且当前第一消息队列也未满,还可以进队其他消息,则直接将插队消息插在第一消息队列中被插队消息的后面,既不耽误第一消息队列中本身排队的其他进队消息的执行,也可以保证插队消息能够及时被消费,及早更新或更正被插队消息的错误。

插队消息插入第一消息队列中时会为其建立对应的消息管理表。

步骤S040与步骤S070是并列的方案,在步骤S030之后,步骤S040和S070只能选择其中一个来执行。

在一个实施例中,步骤S800具体包括:根据待消费消息对应的消息管理表判断待消费消息是否存在插队消息。

具体地,因为如果待消费消息存在插队消息,则其消息管理表中存储有其插队消息对应的子消息编码。由消息管理表中的子消息编码可以判断待消费消息是否存在插队消息。

由步骤S061和S062可知,每个被插队消息的消息管理表中存储的子消息编码可能是其真正的插队消息即纠错消息的子消息编码,也可能是其前面的进队消息的插队消息或纠错消息的子消息编码。

在一个实施例中,消息映射表还包括消息操作表。

步骤S800具体包括:

S810:获取待消费消息对应的消息操作表中的插队状态以判断待消费消息是否存在插队消息;

S820:若插队状态为有效,则判定待消费消息存在插队消息。

具体地,消息操作表中存储有对应进队消息的消息ID和插队状态;插队状态表征该进队消息是否被插队,即是否存在插队消息。

插队状态可以用0和1表示,0代表无效,代表没有被插队,1代表有效,代表被插队。

插队状态还可以用false和true表示,false代表无效,代表没有被插队,true代表有效,代表被插队。

根据待消费消息的消息ID通过查找消息操作表,可以判定待消费消息是否存在插队消息。

在一个实施例中,在步骤S600之前,该方法还包括以下步骤:

S090:对第一消息队列中每个进队消息分别建立对应的消息操作表,

消息操作表存储有对应进队消息的消息ID和插队状态。

在步骤S050之后,该方法还包括以下步骤:

S0100:将被插队消息对应的消息操作表中的插队状态设为有效。

在步骤S060之后,该方法还包括以下步骤:

S0200:将位于被插队消息之后的进队消息对应的消息操作表中的插队状态设为有效。

具体地,将候补被插队消息对应的消息操作表中的插队状态设为有效。

在一个实施例中,在步骤S900之前,该方法还包括以下步骤:

S001:获取待消费消息对应的消息映射表中的撤销状态以判断待消费消息是否为待撤销消息;

S002:若撤销状态为有效,则判定待消费消息为待撤销消息,取消消费待消费消息,若待消费消息存在插队消息,则消费待消费消息的插队消息。

具体地,第一消息队列中的进队消息可以被插队,也可以在消费前被撤销。

如果待消费消息为待撤销消息,则直接取消消费该待撤销消息。即,不将该待撤销消息发送至目标订阅者。具体地,可以通过丢弃该待撤销消息以达到取消消费的目的。撤销消息也可以起到纠正错误的目的。

待撤销消息被取消消费后,不影响其插队消息的正常消费。待撤销消息被丢弃的时候可以执行其插队消息。待撤销消息的插队消息要等到待撤销消息成为待消费消息即排到队头时,确定丢弃待撤销消息后才被消费。待撤销消息虽然不被正常消费,但是它的排队顺序决定了其插队消息被消费的时刻。

S003:若撤销状态为无效,则判定待消费消息不属于待撤销消息,执行步骤S900。

具体地,如果待消费消息不属于待撤销消息,且其有插队消息,则消费该待消费消息后,消费其插队消息。

本申请中,所有已消费的进队消息的消息映射表都会被清空。

在一个实施例中,消息映射表包括消息操作表。

在步骤S600之前,该方法还包括以下步骤:

S004:对第一消息队列中的每个进队消息分别建立对应的消息操作表,消息操作表存储有对应进队消息的消息ID和撤销状态,

S005:获取撤销指令,撤销指令携带有待撤销消息的消息ID,

S006:根据待撤销消息的消息ID和第一消息队列中进队消息的消息操作表,查找消息ID与待撤销消息的消息ID相同的进队消息作为待撤销消息,

S007:将待撤销消息的消息操作表中的撤销状态设为有效。

具体地,第一消息队列中每个进队消息都有对应的消息操作表,消息操作表存储有对应进队消息的消息ID和撤销状态,初始情况下,撤销状态为无效,表征该进队消息不属于待撤销消息。

当有进队消息需要撤销的时候,会接收到撤销指令,撤销指令中携带了待撤销消息的消息ID,根据查表,可以找到第一消息队列中哪个进队消息为待撤销消息。进而可以将该待撤销消息的撤销状态由无效状态更新为有效状态。有效状态表征该进队消息为待撤销消息。在该待撤销消息位于队头时,该待撤销消息并不被正常消费,即不被发送至目标订阅端,而是直接丢弃。

在一个实施例中,插队消息携带有被插队消息的消息ID。步骤S020具体包括以下步骤:

根据插队消息携带的被插队消息的消息ID,从第一消息队列的消息管理表中查找消息ID与插队消息携带的被插队消息的消息ID相同的进队消息作为被插队消息。

在一个具体实施例中,步骤S900具体包括:

S910:对待消费消息对应的消息管理表中待消费消息的消息编码进行解码得到待消费消息内容;

S920:通过第一消息队列将待消费消息内容发送至目标订阅者;

S930:对待消费消息对应的消息管理表中的插队消息的子消息编码进行解码得到待消费插队消息内容;

S940:通过第二消息队列将待消费插队消息内容发送至目标订阅者。

具体地,消息编码是进队消息的消息内容经过编码或编码加密处理后得到的,因此在发送时需要解码得到真正的消息内容后,将真正的消息内容发送至目标订阅者。

同理,子消息编码是插队消息的消息内容经过编码或编码加密处理后得到的,因此在发送时需要解码得到真正的消息内容后,将真正的消息内容发送至目标订阅者。

在一个具体实施例中,如果待消费消息不存在插队消息,则按照正常流程,正常消费该待消费消息后,按照出队方向,消费第一消息队列中的下一个待消费消息。

本申请中,插队消息要不在第二消息队列中排队,并没有真正在第一消息队列中的插队;要不在第一消息队列的队尾插入。因此插队消息都不会影响第一消息队列中的任何一个进队消息的消费顺序或进度。但是第一消息队列中有插队消息的进队消息在被消费后,其插队消息会自动在其后被消费。被插队消息的消费时刻决定了其插队消息的消费时刻。

应该理解的是,除非本文中有明确的说明,上述消息管理方法的各个步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

通过本申请实现了对消息队列中的消息进行纠错、撤销管理。在不影响正常队列中的消息的正常进程的同时,可以及时地修改之前错误的消息,保证系统的稳定性。

例如,在一个应用场景中:ResourcesType为资源的类型,ResourceID为资源的ID,DataJson为需要更新的内容。现有一个区块链资源,该区块链资源有正常、处理中、停止三种状态。其ResourceID为1,该1号区块链资源为正常状态,但由于底层系统处理失误,错认为该1号资源已是停止的状态,因此发送了一条将其停止的消息到消息队列中。但由于系统会短时间进行多次处理,在系统第二次进行处理的时候发现该资源为正常状态,因此在消息操作表中找到上一次发送的消息的记录,将其isWithdrawed字段修改为true,撤销消息的发送。同时我们也能在消息队列表中找到该错误的消息,将正确的消息直接插队在其之后,这样就可以及时地修改之前错误的消息,保证系统的稳定性。

图2为本申请一实施例提供的消息与消息管理表的映射关系图;参考图2,在一个消息队列的出队方向,从队头到队尾依次排队这多个进队消息,每个进队消息都有自己的消息管理表。

参考图2和表1,该消息管理表包括了消息队列中每个进队消息的消息ID(primary_key)、消息编码,且每个进行消息最多只能存储三个插队消息的子消息编码(一号子消息编码、二号子消息编码、三号子消息编码),每个插队消息在消息管理表中有对应的编码code_one、code_two、code_three。

参考表2,每个进队消息还有对应的消息操作表,消息操作表包括消息ID(primary_key)、消息编码code,以及插队状态(isInserted)和撤销状态(isWithdrawed)。其中,插队状态和撤销状态都使用false和true作为取值。False代表无效,表示没有被插队或没有被撤销。True代表有效,表示被插队或被撤销。

当然,在一个具体实施例中,每个进队消息的消息管理表和消息操作表可以合并为一个消息映射表。该消息映射表包括消息ID字段、消息编码code字段、插队消息code_one、code_two、code_three字段、插队状态字段和撤销状态字段及其各自对应的值。

表1:消息管理表

表2:消息操作表

图3为本申请一实施例提供的一消息管理装置的结构框图;该装置包括:

第一消息获取模块600,用于按照第一消息队列的出队方向获取第一消息队列中待消费消息的消息ID;

第一查找模块700,用于根据待消费消息的消息ID获取待消费消息对应的消息映射表;

第一判断模块800,用于根据待消费消息对应的消息映射表判断待消费消息是否存在插队消息;

消费模块900,用于若待消费消息存在插队消息,则消费待消费消息和待消费消息的插队消息。

在一个实施例中,消费模块900,具体用于消费待消费消息后,消费待消费消息的插队消息。

在一个实施例中,消费模块900,具体包括:

第一解码模块910,用于对待消费消息对应的消息管理表中待消费消息的消息编码进行解码得到待消费消息内容;

第一发送模块920,用于第一通过第一消息队列将待消费消息内容发送至目标订阅者;

第二解码模块930,用于对待消费消息对应的消息管理表中的插队消息的子消息编码进行解码得到待消费插队消息内容;

第二发送模块940,用于通过第二消息队列将待消费插队消息内容发送至目标订阅者。

在一个实施例中,消息映射表包括消息管理表。

该消息管理装置还包括:

第一构建模块010,用于对第一消息队列中每个进队消息分别建立对应的消息管理表,消息管理表存储有对应进队消息的消息ID和消息编码;

第二消息获取模块020,用于获取插队消息,确定第一消息队列中插队消息所对应的被插队消息;

第二判断模块030,用于判断被插队消息是否处于第一消息队列的队尾;

编码模块040,用于若被插队消息不处于第一消息队列的队尾,则对插队消息的消息内容进行编码处理得到子消息编码;

第一存储模块050,用于将插队消息的子消息编码存储到被插队消息对应的消息管理表中。

在一个实施例中,该装置包括:第二存储模块060,用于将插队消息的子消息编码存储到位于被插队消息之后的进队消息对应的消息管理表中。

在一个实施例中,第一构建模块010具体包括:

第一子消息获取模块011,用于分别获取第一消息队列中每个进队消息的消息ID和消息内容;

第一子编码模块012,用于分别对每个进队消息的消息内容进行编码处理得到对应的消息编码;

第一子构建模块013,用于根据消息ID和消息编码分别建立第一消息队列中每个进队消息的消息管理表。

在一个实施例中,第一存储模块050具体包括:

第一子判断模块051,用于判断被插队消息对应的消息管理表中已存储的子消息编码数量是否达到最大允许存储量;

第一子存储模块052,用于若被插队消息对应的消息管理表中已存储的子消息编码数量未达到最大允许存储量,则将插队消息的子消息编码按照先后顺序存储到被插队消息对应的消息管理表中的目标位置。

在一个实施例中,第二存储模块060,具体包括:

第二子判断模块061,用于若被插队消息对应的消息管理表中已存储的子消息编码数量已达到最大允许存储量,则获取第一消息队列中位于被插队消息之后,且,对应的消息管理表中已存储的子消息编码数量未达到最大允许存储量的候补被插队消息;

第二子存储模块062,用于将插队消息的子消息编码按照先后顺序存储到候补被插队消息对应的消息管理表中的目标位置。

在一个实施例中,该装置还包括:

进队模块070,用于若被插队消息处于第一消息队列的队尾,且第一消息队列未满,则将插队消息加入到第一消息队列中被插队消息之后。

在一个实施例中,第一判断模块800,具体用于,根据待消费消息对应的消息管理表判断待消费消息是否存在插队消息。

在一个实施例中,消息映射表还包括消息操作表。第一判断模块800,具体包括:

插队状态获取模块810,用于获取待消费消息对应的消息操作表中的插队状态以判断待消费消息是否存在插队消息;

第一判定模块820,用于若插队状态为有效,则判定待消费消息存在插队消息。

在一个实施例中,该装置还包括:

第二构建模块090,用于对第一消息队列中每个进队消息分别建立对应的消息操作表,消息操作表存储有对应进队消息的消息ID和插队状态。

在一个实施例中,该装置还包括:

第一插队状态更新模块0100,用于将被插队消息对应的消息操作表中的插队状态设为有效。

第二插队状态更新模块0200,用于将被插队消息之后的进队消息对应的消息管理表中的插队状态设为有效。

在一个实施例中,该装置还包括:

撤销状态获取模块001,用于获取待消费消息对应的消息映射表中的撤销状态以判断待消费消息是否为待撤销消息;

第二判定模块002,用于若撤销状态为有效,则判定待消费消息为待撤销消息;

撤销模块003,用于取消消费待消费消息。

在一个实施例中,消息映射表包括消息操作表。

该装置还包括:

第三构建模块004,用于对第一消息队列中的每个进队消息分别建立对应的消息操作表,用于消息操作表存储有对应进队消息的消息ID和撤销状态,

撤销指令获取模块005,用于获取撤销指令,撤销指令携带有待撤销消息的消息ID,

第二查找模块006,用于根据待撤销消息的消息ID和第一消息队列中进队消息的消息操作表,查找消息ID与待撤销消息的消息ID相同的进队消息作为待撤销消息,

撤销状态更新模块007,用于将待撤销消息的消息操作表中的撤销状态设为有效。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:按照第一消息队列的出队方向获取第一消息队列中待消费消息的消息ID;根据待消费消息的消息ID获取待消费消息对应的消息映射表;根据待消费消息对应的消息映射表判断待消费消息是否存在插队消息;若待消费消息存在插队消息,则消费待消费消息和待消费消息的插队消息。

处理器执行计算机程序时还实现上述任一项消息管理方法的步骤。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:按照第一消息队列的出队方向获取第一消息队列中待消费消息的消息ID;根据待消费消息的消息ID获取待消费消息对应的消息映射表;根据待消费消息对应的消息映射表判断待消费消息是否存在插队消息;若待消费消息存在插队消息,则消费待消费消息和待消费消息的插队消息。

计算机程序被处理器执行时还实现上述任一项消息管理方法的步骤。

需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。

相关技术
  • 消息队列管理方法、装置、设备及计算机可读存储介质
  • 消息管理方法、装置、存储介质及计算机设备
技术分类

06120112587713