消息管理方法及装置、消息预读方法及装置与流程

文档序号:11180472
消息管理方法及装置、消息预读方法及装置与流程

本发明涉及通信领域,尤其涉及一种消息管理方法及装置、消息预读方法及装置。



背景技术:

在云计算中,消息管理是非常重要的一个环节,它影响着整个云计算系统的性能。这里首先说明一下与消息有关的术语:

消息队列先进先出:先进入队列的消息优先被消费。

消息可靠性:消息进入消息队列后被持久化到磁盘,保证消息不会因掉电丢失。

至少消费一次:消息只有在消费成功后才会被用户主动删除,否则可以一直被消费。

活跃的消息:可以被消费的消息。

不活跃的消息:正在被用户消费的消息。

删除的消息:被用户主动标志为已消费的消息。

消息的处理过程是,首先,消息生产者(也可称为客户端)将生产的消息写入磁盘;在缓存为空时,触发一次预读操作,将消息从磁盘预读到缓存中;消息消费者(也可称为客户端)从缓存中读取出消息,进行消费。如果消息消费失败,则复活消息到磁盘中。

可靠消息系统在服务端持久化消息的读取状态,来保证消息“至少消费一次”。同时需要返回当前消息队列中最先入队的消息,来保证消息队列先进先出的特性。每个进入消息队列的消息都会分配一个消息编号(也即消息ID),消息编号按照消息入队的先后有序。如果消息未能被成功消费,将会再次入队来确保能够被再次消费。这样系统当前的最先入队的消息是动态变化的。

一种相关技术中,通过如下方式获取最先入队的消息:在消息的元数 据信息中增加两个属性,一个属性用来记录消息是否已经被成功消费,另一个属性记录下一个消息的位置。在消息被发送到消息系统中时将消息的消费状态设置为“未消费”,在用户消费获取消息后将消息状态设置为“正在消费”,用户成功消费消息后主动将消息的状态设置为“已消费”。服务端记录当前系统中第一个“未消费”消息的位置。该相关技术为了保证消息的先进先出需要顺序消费消息,无法支持并发消费,限制了消息的处理速度,而且该相关技术中,修改消息的属性还会导致随机写磁盘,严重影响系统的性能。

另一种相关技术中,通过如下方式获取最先入队的消息:将一个消息队列分成两部分,即“未消费的消息队列”和“正在消费的消息队列”。消息发送至系统后进入“未消费的消息队列”。用户获取消息后,消息出“未消费的消息队列”,进入“正在消费的消息队列”。消费成功后,用户主动将消息从“正在消费的消息队列”中删除。否则,在超出约定的时间后,系统会把消息从“正在消费的消息队列”移至“未消费的消息队列”的队尾,使消息可以被再次消费,来保证消息至少被消费一次。该相关技术在消息消费失败的时候,系统需要把该消息再次加入“未消费的消息队列”的队尾,会严重影响消息先进先出的特性。



技术实现要素:

本发明的目的在于提供一种消息管理方法及装置、消息预读方法及装置,在保证消息先进先出特性的前提下,提高消息预读速度,提升系统性能。

为实现上述目的,本发明提出了一种消息管理方法,包括:

在内存中记录消息队列中可消费消息的编号范围;

根据所述消息队列中消息的状态变化情况调整所述编号范围和管理消息。

进一步地,上述方法还可具有以下特点,所述编号范围包括至少一个编号区间,且任意两个编号区间不重叠。

进一步地,上述方法还可具有以下特点,所述编号范围中的各编号区间按照区间右端点消息编号从小到大的顺序排列。

进一步地,上述方法还可具有以下特点,所述根据所述消息队列中消息的状态变化情况调整所述编号范围和管理消息,包括:

在从缓存中取出所述消息队列中被预读到所述缓存的消息供客户端消费之后,缩小所述编号范围,将所述取出的消息的编号排除在所述编号范围之外,且在所述消息队列中将所述取出的消息标记为不可消费消息。

进一步地,上述方法还可具有以下特点,所述根据所述消息队列中消息的状态变化情况调整所述编号范围和管理消息,包括:

在客户端超时未返回消费结果的情况下,扩大所述编号范围,使所述超时未返回消费结果的消息的编号包括在所述编号范围之内,且在所述消息队列中将所述超时未返回消费结果的消息标记为可消费消息。

进一步地,上述方法还可具有以下特点,所述根据所述消息队列中消息的状态变化情况调整所述编号范围和管理消息,包括:

在客户端成功消费消息的情况下,在所述消息队列将消费成功的消息删除。

进一步地,上述方法还可具有以下特点,所述根据所述消息队列中消息的状态变化情况调整所述编号范围和管理消息,包括:

在从所述消息队列预读消息到缓存之后,所述编号范围中的非最大编号区间对应的全部可消费消息都已被预读的情况下,从所述编号范围中删除所述非最大编号区间。

本发明实施例的消息管理方法,通过编号范围来管理消息队列中可消费消息的编号,在保证消息先进先出特性的前提下提高了消息预读速度,提升了消息系统性能。

为实现上述目的,本发明还提出了一种消息管理装置,包括:

记录模块,用于在内存中记录消息队列中可消费消息的编号范围;

调整模块,用于根据所述消息队列中消息的状态变化情况调整所述记录模块记录的所述编号范围和管理消息。

进一步地,上述装置还可具有以下特点,所述编号范围包括至少一个编号区间,且任意两个编号区间不重叠。

进一步地,上述装置还可具有以下特点,所述编号范围中的各编号区间按照区间右端点消息编号从小到大的顺序排列。

进一步地,上述装置还可具有以下特点,所述调整模块包括:

缩小单元,用于在从缓存中取出所述消息队列中被预读到所述缓存的消息供客户端消费之后,缩小所述编号范围,将所述取出的消息的编号排除在所述编号范围之外,且在所述消息队列中将所述取出的消息标记为不可消费消息。

进一步地,上述装置还可具有以下特点,所述调整模块包括:

扩大单元,用于在客户端超时未返回消费结果的情况下,扩大所述编号范围,使所述超时未返回消费结果的消息的编号包括在所述编号范围之内,且在所述消息队列中将所述超时未返回消费结果的消息标记为可消费消息。

进一步地,上述装置还可具有以下特点,所述调整模块包括:

消息删除单元,用于在客户端成功消费消息的情况下,在所述消息队列将消费成功的消息删除。

进一步地,上述装置还可具有以下特点,所述调整模块包括:

区间删除单元,用于在从所述消息队列预读消息到缓存之后,所述编号范围中的非最大编号区间对应的全部可消费消息都已被预读的情况下,从所述编号范围中删除所述非最大编号区间。

本发明实施例的消息管理装置,通过编号范围来管理消息队列中可消费消息的编号,在保证消息先进先出特性的前提下提高了消息预读速度,提升了消息系统性能。

为实现上述目的,本发明还提出了一种消息预读方法,包括:

查询内存中记录的消息队列中可消费消息的编号范围,确定所述消息队列中编号最小的N个可消费消息的编号,N为自然数;

根据确定的所述N个可消费消息的编号从所述消息队列中预读相应的消息到缓存。

进一步地,上述方法还可具有以下特点,所述编号范围包括至少一个编号区间,且任意两个编号区间不重叠。

进一步地,上述方法还可具有以下特点,所述编号范围中的各编号区间按照区间右端点消息编号从小到大的顺序排列。

本发明实施例的消息预读方法,能够根据内存中按照消息编号的顺序 记录的消息队列中可消费消息的编号范围快速查询到消息队列中编号最小的设定数目个可消费消息的编号,并且还保证了消息的先进先出特性,提高了消息预读速度,提升了消息系统性能。

为实现上述目的,本发明还提出了一种消息预读装置,包括:

查询模块,用于查询内存中记录的消息队列中可消费消息的编号范围,确定所述消息队列中编号最小的N个可消费消息的编号,N为自然数;

预读模块,用于根据所述查询模块确定的所述N个可消费消息的编号从所述消息队列中预读相应的消息到缓存。

进一步地,上述装置还可具有以下特点,所述编号范围包括至少一个编号区间,且任意两个编号区间不重叠。

进一步地,上述装置还可具有以下特点,所述编号范围中的各编号区间按照区间右端点消息编号从小到大的顺序排列。

本发明实施例的消息预读装置,能够根据内存中按照消息编号的顺序记录的消息队列中可消费消息的编号范围快速查询到消息队列中编号最小的设定数目个可消费消息的编号,并且还保证了消息的先进先出特性,提高了消息预读速度,提升了消息系统性能。

为实现上述目的,本发明还提出了一种消息管理设备,包括前述任一项所述的消息管理装置。

本发明实施例的消息管理设备中包括消息管理装置,通过编号范围来管理消息队列中可消费消息的编号,在保证消息先进先出特性的前提下提高了消息预读速度,提升了消息系统性能。

为实现上述目的,本发明还提出了一种消息预读设备,包括前述任一项所述的消息预读装置。

本发明实施例的消息预读设备中包括消息预读装置,能够根据内存中按照消息编号的顺序记录的消息队列中可消费消息的编号范围快速查询到消息队列中编号最小的设定数目个可消费消息的编号,并且还保证了消息的先进先出特性,提高了消息预读速度,提升了消息系统性能。

附图说明

图1为本发明实施例中消息的处理过程示意图。

图2为本发明实施例一中消息管理方法的流程图。

图3为在复活消息MsgID时对消息MsgID的前驱游标域进行扩大的示意图。

图4为本发明实施例二中消息管理装置的结构框图。

图5为本发明实施例三中消息预读方法的流程图。

图6为本发明实施例四中消息预读装置的结构框图。

图7为本发明实施例五中消息管理设备的结构框图。

图8为本发明实施例六中消息预读设备的结构框图。

图9为本发明实施例七中设备900的结构框图。

具体实施方式

以下结合附图对本发明的原理和特征进行描述,所举实施例只用于解释本发明,并非用于限定本发明的范围。对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,根据本发明精神所获得的所有实施例,都属于本发明的保护范围。

图1为本发明实施例中消息的处理过程示意图。如图1所示,本发明实施例中,消息的处理过程是:

客户端将生成的消息写入磁盘,消息进入消息队列;

缓存为空时,从磁盘批量获取N个最先进入消息队列的消息到缓存,此为消息预读操作;

从缓存读取消息供客户端进行消费,并在消息队列中将被读取的消息标记为不可消费消息;

客户端消费完成后,向服务器返回消费结果;

管理模块根据消费结果处理磁盘中的相应消息:如果消费成功,则删除消息队列中的相应消息,如果客户端超时未返回消息消费成功的信息,则认为消息消费失败,复活该消息,将消息队列中的该消息标记为可消费消息。

在整个消息的处理过程中,可以在内存中用游标记录消息队列中可消费消息的编号范围。

图2为本发明实施例一中消息管理方法的流程图。如图2所示,本实 施例中,消息管理方法可以包括如下步骤:

步骤S201,在内存中记录消息队列中可消费消息的编号范围;

其中,该编号范围可以包括至少一个编号区间,且任意两个编号区间不重叠。

其中,消息编号代表消息进入消息队列的顺序,消息编号越小,表明该消息进入消息队列越早。例如,消息10是第10个进入消息队列的消息。

由于可消费消息的编号范围是按照消息编号的顺序记录的,因此可以保证消息的先进先出特性。可消费消息的编号范围可以作为查询要预读的批量消息的依据。通过可消费消息的编号范围不仅可以快速查找到要预读到缓存的批量消息,而且保证了消息的先进先出特性。

在本发明实施例中,编号范围中的各编号区间按照区间右端点消息编号从小到大的顺序排列。本文中,将这样的编号范围称为游标域集合,将这样的编号范围中的编号区间称为游标域。游标域用左闭右开区间表示。

本文中,将编号范围的编号区间的两个端点处的消息编号分别称为左端点消息编号和右端点消息编号。

当然,在本发明其他实施例中,所述的编号范围可以采用其他形式表示,只要其能够表明消息队列中可消费消息的编号范围,并且能够表明这些可消费消息的编号顺序即可。这样,就可以保证通过该编号范围就能查询到消息队列中哪些消息可以消费,并保证这些可消费的消息能够按照先进先出的特性被取出消费。

以下将消息队列中可消费消息的编号范围简称为编号范围。

步骤S202,根据消息队列中消息的状态变化情况调整该编号范围和管理消息。

在本发明实施例中,根据消息队列中消息的状态变化情况调整编号范围和管理消息可以包括:在从缓存中取出消息队列中被预读到缓存的消息供客户端消费之后,缩小编号范围,将取出的消息的编号排除在该编号范围之外,且在消息队列中将该取出的消息标记为不可消费消息。

例如,假设编号范围的初始状态为{[1,101)},消息队列中被预读到缓存的消息为消息1至消息10这10个消息,在从缓存中取出这10个消息之后,将编号范围{[1,101)}缩小为{[11,101)},使得消息1至消息10 这10个消息的编号被排除在了可消费消息的编号范围之外。

消息消费者从缓存中取出的消息进入到非活跃消息队列,属于不活跃的消息,也即正在被用户消费的消息。如果这些消息被消费成功,那么这些消息就属于不可消费的消息,将被排除出可消费消息的范围。这里将所有从缓存中取出的消息都先按照消费成功的情况处理,如果消费失败,再通过后续的复活机制加入到可消费消息的范围中。

在本发明实施例中,根据消息队列中消息的状态变化情况调整编号范围和管理消息还可以包括:在客户端超时未返回消费结果的情况下,扩大编号范围,使超时未返回消费结果的消息的编号包括在该编号范围之内,且在消息队列中将该超时未返回消费结果的消息标记为可消费消息。其中,如果客户端超时未返回消费结果,可以认为消息消费失败,因此,将超时未返回消费结果的消息称为消费失败的消息。这就是消费失败的消息的复活机制。通过将消费失败的消息的编号包括到编号范围之内,使得可以对该消息进行再次消费,并且可以按照先进先出的特性进行消费。

这里,以游标域集合为例,对因消息消费失败而扩大可消费消息的编号范围的情况进行说明。

具体地,在消息队列中的消息消费失败的情况下,扩大编号范围,使消费失败的消息的编号包括在该编号范围之内,可以通过如下步骤实现:

消费失败的消息也就是要复活的消息。

步骤a,假设复活的消息的消息ID为MsgID,根据MsgID,在游标域集合中定位游标域[MsgID,MsgID+1)的上界游标域,记上界游标域为[Upper_BeginID,Upper_EndID),其中,MsgID的上界游标域是指游标域集合中第一个右端点消息编号大于MsgID+1的游标域;

步骤b,如果该上界游标域[Upper_BeginID,Upper_EndID)已经包含MsgID,则结束流程,不再调整游标域;

步骤c,如果该上界游标域的左端点消息编号Upper_BeginID>MsgID,则进行后续操作来调整游标域集合以使游标域集合涵盖MsgID;

步骤d,获取消息MsgID的前驱游标域[Pre_BeginID,Pre_EndID),其中,消息MsgID的前驱游标域是指游标域集合中第一个右端点消息编号小于MsgID+1的游标域;

步骤e,如果消息MsgID的前驱游标域不存在,则将[MsgID,MsgID+1)加入游标域集合,然后结束流程;

步骤f,如果消息MsgID的前驱游标域存在,则将游标域[Pre_BeginID,MsgID+1)和游标域[MsgID,Upper_EndID)中范围较小且不超过MAX_RANGE_SIZE的游标域加入游标域集合,来替换前驱游标域或者上界游标域(如果两者中游标域[Pre_BeginID,MsgID+1)范围较小,就用[Pre_BeginID,MsgID+1)替换前驱游标域[Pre_BeginID,Pre_EndID),如果两者中游标域[MsgID,Upper_EndID)范围较小,就用[MsgID,Upper_EndID)替换上界游标域[Upper_BeginID,Upper_EndID)),其中,MAX_RANGE_SIZE为预设的游标域的最大范围;

步骤g,如果消息MsgID的前驱游标域存在,且将游标域[Pre_BeginID,MsgID+1)和游标域[MsgID,Upper_EndID)的范围都超过MAX_RANGE_SIZE,则将[MsgID,MsgID+1)加入游标域集合。

需要说明的是,在步骤f中,如果游标域集合的规模达到上限(该上限即游标域集合的最大规模,用MAX_COUNT表示),则不能再添加新的游标域,而是选择上界游标域或者前驱游标域进行扩大。特别的,如果上界游标域是最大游标域,则只能对其前驱游标域进行扩大。即在MsgID-Pre_BeginID<Upper_EndID-MsgID,并且MsgID-Pre_BeginID<MAX_RANGE_SIZE的情况下,将前驱游标域扩大为[Pre_BeginID,MsgID+1),如图3所示。图3为在复活消息MsgID时对消息MsgID的前驱游标域进行扩大的示意图,图3中,PB表示Pre_BeginID,PE表示Pre_EndID,UB表示Upper_BeginID,UE表示Upper_EndID。其中,MAX_COUNT表示游标域集合中最多可以包含的游标域的总数目。

在步骤f中,如果游标域[Pre_BeginID,MsgID+1)和游标域[MsgID,Upper_EndID)的范围相同且都不超过MAX_RANGE_SIZE,可以随机选择游标域[Pre_BeginID,MsgID+1)来替换前驱游标域或者选择[MsgID,Upper_EndID)来替换上界游标域,也可以默认选择游标域[Pre_BeginID,MsgID+1)来替换前驱游标域。

这里举例说明。以下例1至例4假设MAX_RANGE_SIZE为100,MAX_COUNT为10。

例1、假设当前游标域集合为{[5,101)},复活的消息编号为6。消息6存在上界游标域[5,101),并且消息6包含在上界游标域[5,101)中,此时不再调整游标域集合,则消息6复活后,游标域集合仍然为{[5,101)}。

例2、假设当前游标域集合为{[11,101)},复活的消息编号为6。消息6存在上界游标域[11,101)且上界游标域[11,101)的左端点消息编号11大于6,不存在前驱游标域,此时将游标域[6,7)添加到游标域集合中,则消息6复活后,游标域集合为{[6,7),[11,101)}。

例3、假设当前游标域集合为{[3,6),[11,101)},复活的消息编号为6。消息6存在上界游标域[11,101)和前驱游标域[3,6)。游标域[3,7)和游标域[6,101)中范围较小且不超过MAX_RANGE_SIZE的游标域为[3,7),此时将游标域[3,7)添加到游标域集合替换游标域[3,6),则消息6复活后,游标域集合为{[3,7),[11,101)}。

例4、假设当前游标域集合为{[1,101),[106,206)},复活的消息编号为103。消息103存在上界游标域[106,206)和前驱游标域[1,101)。但游标域[1,104)和游标域[103,206)的范围都超过了MAX_RANGE_SIZE(上述假设MAX_RANGE_SIZE为100),此时将游标域[3,7)添加到游标域集合,则消息103复活后,游标域集合为{[1,101),[103,104),[106,206)}。

也就是说,在消息队列中的消息消费失败的情况下,扩大编号范围,使消费失败的消息的编号包括在该编号范围之内,可以包括下面四种情况之一:

一,假设复活的消息编号为MsgID,在当前游标域集合中存在消息MsgID的上界游标域,且MsgID包含在所述上界游标域的情况下,维持当前游标域集合不变。

二,假设复活的消息编号为MsgID,在当前游标域集合中存在消息MsgID的上界游标域、不存在消息MsgID的前驱游标域,且所述上界游标域的开头消息编号大于MsgID的情况下,将游标域[MsgID,MsgID+1)添加到当前游标域集合中。

三,假设复活的消息编号为MsgID,在当前游标域集合中存在消息MsgID的上界游标域[UB,UE)和前驱游标域[PB,PE),扩展前驱游标域 [PB,MsgID+1)和扩展上界游标域[MsgID,UE)两者之一或全部小于预设的第二阈值的情况下,选择两者之中范围小的游标域替换相应的原游标域;在当前游标域集合的规模达到上限并且上界游标域[UB,UE)是当前游标域集合中最大游标域的情况下,选择扩展前驱游标域[PB,MsgID+1)替换前驱游标域[PB,PE)。

四,假设复活的消息编号为MsgID,在当前游标域集合中存在消息MsgID的上界游标域[UB,UE)和前驱游标域[PB,PE),扩展前驱游标域[PB,MsgID+1)和扩展上界游标域[MsgID,UE全部大于预设的第二阈值的情况下,将游标域[MsgID,MsgID+1)添加到当前游标域集合中。

在本发明实施例中,根据消息队列中消息的状态变化情况调整编号范围和管理消息可以包括:在客户端成功消费消息的情况下,在消息队列将消费成功的消息删除。此处的删除是指将消息从存储消息队列的磁盘中删除,也即从消息队列中删除。

在本发明实施例中,根据消息队列中消息的状态变化情况调整编号范围和管理消息还可以包括:在从消息队列预读消息到缓存之后,该编号范围中的非最大编号区间对应的全部可消费消息都已被预读的情况下,从该编号范围中删除该非最大编号区间。

删除这样的非最大编号区间后,编号范围中编号区间的数目减少了,对编号区间的搜索次数就减少了,因此能够缩短查询编号范围的时间,进一步提高消息的预读速度。

为了进一步对编号范围进行管理,可以为编号范围设置版本号及版本号更新规则。例如,设置编号范围的初始版本号为1;每次修改编号范围,编号范围的版本号加1;如果修改编号范围时需要修改编号区间,则将修改后的编号范围的版本号作为编号区间的版本号。在删除编号区间时需要保证编号区间未被修改,即编号区间的版本号没有变化,否则不能删除。

本发明实施例的消息管理方法,通过编号范围来管理消息队列中可消费消息的编号,并且保证了消息的先进先出特性,在需要预读批量消息到缓存时,可以根据编号范围快速查询到消息队列中编号最小的设定数目个可消费消息的编号,在保证消息先进先出特性的前提下提高了消息预读速度,提升了消息系统性能。

本发明还提出了一种消息管理装置,用以实施上述的消息管理方法。上述消息管理方法实施例中的原理说明,也同样适用于下面的消息管理装置各实施例。

图4为本发明实施例二中消息管理装置的结构框图。如图4所示,本实施例中,消息管理装置400可以包括记录模块410和调整模块420。其中,记录模块410用于按照消息编号的顺序在内存中记录消息队列中可消费消息的编号范围。调整模块420用于根据消息队列中消息的状态变化情况调整记录模块410记录的编号范围和管理消息。

其中,编号范围可以包括至少一个编号区间,且任意两个编号区间不重叠。

由于可消费消息的编号范围是按照消息编号的顺序记录的,因此可以保证消息的先进先出特性。可消费消息的编号范围可以作为查询要预读的批量消息的依据。通过可消费消息的编号范围不仅可以快速查找到要预读到缓存的批量消息,而且保证了消息的先进先出特性。

其中,编号范围中的各编号区间可以按照区间右端点消息编号从小到大的顺序排列。

在本发明实施例中,调整模块420可以包括缩小单元。缩小单元用于在从缓存中取出消息队列中被预读到缓存的消息供客户端消费之后,缩小该编号范围,将取出的消息的编号排除在该编号范围之外,且在消息队列中将所述取出的消息标记为不可消费消息。

在本发明实施例中,调整模块420可以包括扩大单元。扩大单元用于在客户端超时未返回消费结果的情况下,扩大编号范围,使超时未返回消费结果的消息的编号包括在该编号范围之内,且在所述消息队列中将所述超时未返回消费结果的消息标记为可消费消息。

在本发明实施例中,调整模块420可以包括消息删除单元。消息删除单元用于在客户端成功消费消息的情况下,在消息队列将消费成功的消息删除。

在本发明实施例中,调整模块420可以包括区间删除单元。删除单元用于在从消息队列预读消息到缓存之后,编号范围中的非最大编号区间对应的全部可消费消息都已被预读的情况下,从编号范围中删除该非最大编 号区间。

本发明实施例的消息管理装置,通过编号范围来管理消息队列中可消费消息的编号,并且保证了消息的先进先出特性,在需要预读批量消息到缓存时,可以根据编号范围快速查询到消息队列中编号最小的设定数目个可消费消息的编号,在保证消息先进先出特性的前提下提高了消息预读速度,提升了消息系统性能。

图5为本发明实施例三中消息预读方法的流程图。如图5所示,本实施例中,消息预读方法可以包括如下步骤:

步骤S501,查询内存中记录的消息队列中可消费消息的编号范围,确定消息队列中编号最小的N个可消费消息的编号,N为自然数;

其中,编号范围可以包括至少一个编号区间,且任意两个编号区间不重叠。

其中,本步骤中的可消费消息的编号范围与前述消息管理方法中的编号范围是相同的。

可消费消息的编号范围可以作为查询要预读的批量消息的依据。通过可消费消息的编号范围不仅可以快速查找到要预读到缓存的批量消息,而且保证了消息的先进先出特性。

在本发明实施例中,所述的编号范围可以包括至少一个编号区间,该编号范围中的各编号区间可以按照区间右端点消息编号从小到大的顺序排列,且该编号范围中的任意两个编号区间不重叠。本文中,将这样的编号范围称为游标域集合,将这样的编号范围中的编号区间称为游标域。游标域用左闭右开区间表示。

步骤S502,根据确定的N个可消费消息的编号从消息队列中预读相应的消息到缓存。

该N个可消费消息是消息队列中编号最小的N个可消费消息,保证了消息的先进先出特性。

下面通过两个具体示例来对本发明的消息预读方法作进一步说明。

示例一

假设内存中按照消息编号的顺序记录的消息队列中可消费消息的编号范围为{[6,9),[11,101)},该编号范围内的所有消息都不是标识为已 删除的消息。则从消息队列预读5个可消费消息到缓存的过程是:查询编号范围{[6,9),[11,101)},确定编号最小的5个可消费消息的编号为6、7、8、11、12;从消息队列中消息6、消息7、消息8、消息11、消息12到缓存。

这里说明一下,标识为已删除的消息是已经被消费成功的消息,这样的消息不属于可消费消息,但是这些消息的编号可能被包括在可消费消息的编号范围之内。这就需要在根据编号范围确定预读消息编号的时候,将这些标识为已删除的消息的编号排除掉。此种情况请参见如下的示例二。

示例二

仍然假设内存中按照消息编号的顺序记录的消息队列中可消费消息的编号范围为{[6,9),[11,101)},该编号范围内的消息7是标识为已删除的消息。则从消息队列预读5个可消费消息到缓存的过程是:查询编号范围{[6,9),[11,101)},确定编号最小的5个可消费消息的编号为6、8、11、12、13(由于消息7是标识为已删除的消息,编号7被排除掉了);从消息队列中消息6、消息8、消息11、消息12、消息13到缓存。

本发明实施例的消息预读方法,能够根据内存中记录的消息队列中可消费消息的编号范围快速查询到消息队列中编号最小的设定数目个可消费消息的编号,并且还保证了消息的先进先出特性,提高了消息预读速度,提升了消息系统性能。

本发明还提出了一种消息预读装置,用以实施上述的消息预读方法。上述消息预读方法实施例中的原理说明,也同样适用于下面的消息预读装置各实施例。

图6为本发明实施例四中消息预读装置的结构框图。如图6所示,本实施例中,消息预读装置600可以包括查询模块610和预读模块620。其中可,查询模块610用于查询内存中记录的消息队列中可消费消息的编号范围,确定消息队列中编号最小的N个可消费消息的编号,N为自然数。预读模块620用于根据查询模块610确定的N个可消费消息的编号从消息队列中预读相应的消息到缓存。

其中,可消费消息的编号范围与前述消息管理方法中的编号范围是相同的。

其中,编号范围可以包括至少一个编号区间,且任意两个编号区间不重叠。

由于可消费消息的编号范围是按照消息编号的顺序记录的,因此可以保证消息的先进先出特性。可消费消息的编号范围可以作为查询要预读的批量消息的依据。通过可消费消息的编号范围不仅可以快速查找到要预读到缓存的批量消息,而且保证了消息的先进先出特性。

在本发明实施例中,所述的编号范围可以包括至少一个编号区间,该编号范围中的各编号区间按照区间右端点消息编号从小到大的顺序排列,且该编号范围中的任意两个编号区间不重叠。本文中,将这样的编号范围称为游标域集合,将这样的编号范围中的编号区间称为游标域。游标域用左闭右开区间表示。

本发明实施例的消息预读装置,能够根据内存中记录的消息队列中可消费消息的编号范围快速查询到消息队列中编号最小的设定数目个可消费消息的编号,并且还保证了消息的先进先出特性,提高了消息预读速度,提升了消息系统性能。

图7为本发明实施例五中消息管理设备的结构框图。如图7所示,本实施例中,消息管理设备700可以包括消息管理装置400。该消息管理装置400可以是前述消息管理装置实施例中的任意一种消息管理装置。

其中,消息管理装置400可以用于按照消息编号的顺序在内存中记录消息队列中可消费消息的编号范围,编号范围包括至少一个编号区间,且任意两个编号区间不重叠;以及,根据消息队列中消息的状态变化情况调整编号范围和管理消息。

本发明实施例的消息管理设备,通过编号范围来管理消息队列中可消费消息的编号,并且保证了消息的先进先出特性,在需要预读批量消息到缓存时,可以根据编号范围快速查询到消息队列中编号最小的设定数目个可消费消息的编号,在保证消息先进先出特性的前提下提高了消息预读速度,提升了消息系统性能。

图8为本发明实施例六中消息预读设备的结构框图。如图8所示,本实施例中,消息预读设备800可以包括消息预读装置600。该消息预读装置600可以是前述消息预读装置实施例中的任意一种消息预读装置。

其中,消息预读装置600可以用于查询内存中记录的消息队列中可消费消息的编号范围,确定消息队列中编号最小的N个可消费消息的编号,N为自然数;根据确定的N个可消费消息的编号从消息队列中预读相应的消息到缓存。其中,编号范围可以包括至少一个编号区间,且任意两个编号区间不重叠。

本发明实施例的消息预读设备,能够根据内存中记录的消息队列中可消费消息的编号范围快速查询到消息队列中编号最小的设定数目个可消费消息的编号,并且还保证了消息的先进先出特性,提高了消息预读速度,提升了消息系统性能。

图9为本发明实施例七中设备900的结构框图。如图9所示,本实施例中,设备900可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。

参照图9,设备900可以包括以下一个或多个组件:处理组件902,存储器904,电源组件906,多媒体组件908,音频组件910,输入/输出(I/O)的接口912,传感器组件914,以及通信组件916。

处理组件902通常控制设备900的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理元件902可以包括一个或多个处理器920来执行指令,以完成上述的方法的全部或部分步骤,具体包括:在内存中记录消息队列中可消费消息的编号范围;根据所述消息队列中消息的状态变化情况调整所述编号范围和管理消息;查询内存中记录的消息队列中可消费消息的编号范围,确定所述消息队列中编号最小的N个可消费消息的编号,N为自然数;根据确定的所述N个可消费消息的编号从所述消息队列中预读相应的消息到缓存。

此外,处理组件902可以包括一个或多个模块,便于处理组件902和其他组件之间的交互。例如,处理组件902可以包括多媒体模块,以方便多媒体组件908和处理组件902之间的交互。

存储器904被配置为存储各种类型的数据以支持在设备900的操作。这些数据的示例包括用于在设备900上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器904可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机 存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。

电源组件906为设备900的各种组件提供电力。电源组件906可以包括电源管理系统,一个或多个电源,及其他与为设备900生成、管理和分配电力相关联的组件。

多媒体组件908包括在所述设备900和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件908包括一个前置摄像头和/或后置摄像头。当设备900处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。

音频组件910被配置为输出和/或输入音频信号。例如,音频组件910包括一个麦克风(MIC),当设备900处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器904或经由通信组件916发送。在一些实施例中,音频组件910还包括一个扬声器,用于输出音频信号。

I/O接口912为处理组件902和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。

传感器组件914包括一个或多个传感器,用于为设备900提供各个方面的状态评估。例如,传感器组件914可以检测到设备900的打开/关闭状态,组件的相对定位,例如所述组件为设备900的显示器和小键盘,传感器组件914还可以检测设备900或设备900一个组件的位置改变,用户与设备900接触的存在或不存在,设备900方位或加速/减速和设备900的温度变化。传感器组件914可以包括接近传感器,被配置用来在没有任何的 物理接触时检测附近物体的存在。传感器组件914还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件914还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。

通信组件916被配置为便于设备900和其他设备之间有线或无线方式的通信。设备900可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件916经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件916还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。

在示例性实施例中,设备900可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。

在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器904,上述指令可由设备900的处理器920执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。

本发明实施例还提供了一种非临时性计算机可读存储介质,当所述存储介质中的指令由移动终端的处理器执行时,使得移动终端能够执行一种方法,所述方法包括:在内存中记录消息队列中可消费消息的编号范围;根据所述消息队列中消息的状态变化情况调整所述编号范围;查询内存中记录的消息队列中可消费消息的编号范围,确定所述消息队列中编号最小的N个可消费消息的编号,N为自然数;根据确定的所述N个可消费消息的编号从所述消息队列中预读相应的消息到缓存。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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