一种消息持久化方法、服务器和计算机可读存储介质技术

技术编号:17304318 阅读:19 留言:0更新日期:2018-02-18 22:14
本发明专利技术公开了一种消息持久化方法、服务器和计算机可读存储介质。在所述方法中,创建数据文件用于存储需要持久化的消息,创建消息索引文件和时间索引文件用于索引读取数据文件中的消息。通过创建消息索引文件以使得只需要读取数据文件一次便可以得到所需消息。通过创建时间索引文件可读取指定时间的消息。因此,所述方法可以方便快速的从数据文件中读取指定时间的消息。

A message persistence method, server and computer readable storage medium

The invention discloses a message persistence method, a server and a computer readable storage medium. In the method, data files are created for storing persistent messages, creating message index files and time index files for indexing and reading messages in data files. By creating a message index file so that only a data file needs to be read once, the required message can be obtained. The specified time message can be read by creating a time index file. Therefore, the method can easily and quickly read the message for the specified time from the data file.

【技术实现步骤摘要】
一种消息持久化方法、服务器和计算机可读存储介质
本专利技术涉及网络通信
,更具体地,涉及一种消息持久化方法、服务器和计算机可读存储介质。
技术介绍
随着信息技术的发展,以及分布式系统的广泛应用,在分布式软件系统中,消息中间件在许多行业的关键应用中扮演着至关重要的角色。消息中间件适用于需要可靠的数据传送的分布式环境。采用消息中间件机制的系统中,不同的对象之间通过传递消息来激活对方的事件,完成相应的操作。消息发布端将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给消息消费端。消息中间件系统中,需要将消息发布端的消息持久化保存在硬盘等存储中,一般持久化保存到文件或数据库中,以备其他消息消费端可以可靠的接收消息。为了更高效地进行消息交互,目前对消息中间件系统的发送接收的单位时间吞吐率要求很高,对消息持久化存储消息的速率要求很高,对消息恢复时读取消息的速率要求也很高,即需要很高的读写文件或数据库的速率。在现有的技术中,activeMQ是采用树的索引方式,在恢复指定消息序列号区间的消息时,需要遍历索引文件树的各个节点,再通过消息索引去查找数据文件,索引文件树的遍历效率较低,访问速率会比较慢。Kafka是一种高吞吐量的分布式发布订阅消息系统,在Kafka系统的持久化消息方法中索引文件设置了消息偏移地址,可以通过消息偏移地址比较快的找到消息所在的段文件。段文件中很多个日志记录,通过每个日志记录的消息长度字段去一次次跳转找到需要恢复的消息位置。如果段文件中有n条消息,按照二分法去查找待恢复的消息,需要log2n次,也不能满足目前快速高效的要求。
技术实现思路
有鉴于此,本专利技术提供了一种消息持久化方法、服务器和计算机可读存储介质,以实现快速读取指定时间的消息。第一方面,提供一种消息持久化方法,包括:接收需要持久化的消息后,获取所述消息所属的消息主题;将所述消息存储在所述消息主题对应的数据文件中;定时更新消息索引文件,建立所述消息对应的消息索引记录,所述消息索引文件包括索引头和消息索引记录;以及在时间索引文件中,每隔单位时间生成一条时间索引记录;其中,所述消息索引文件和所述时间索引文件是在预先设定的时间点创建的;所述索引头包括参考时间戳,所述参考时间戳对应的参考时间作为存储消息时间点的参考;所述消息索引记录包括对应的数据文件标识、所述消息在所述数据文件中的偏移地址和相对时间戳,所述相对时间戳是存储消息时间点相对所述参考时间而得到的;所述时间索引记录用于存储在当前单位时间内存储的第一条消息对应的消息索引记录在所述消息索引文件中的偏移地址。进一步地,所述方法还包括:在接收到读取指定时间段内消息的指令时根据所述时间索引文件和所述消息索引文件索引并读取对应数据文件中对应的消息。进一步地,根据所述时间索引文件和所述消息索引文件索引并读取对应数据文件中对应的消息包括:根据所述参考时间戳获取所述指定时间段的相对起始单位时间和相对结束单位时间;根据所述相对起始单位时间和所述时间索引文件索引获取第一消息索引记录的偏移地址;根据所述相对结束单位时间和所述时间索引文件索引获取第二消息索引记录的偏移地址;在所述消息索引文件中获取所述第一消息索引记录的偏移地址和第二消息索引记录的偏移地址之间的所有消息索引记录;根据所获取的消息索引记录读取对应的数据文件获得指定时间段的所有消息;其中,根据所述第一消息索引记录的偏移地址依次加上一条消息索引记录的字节长度值直到得到所述第二消息索引记录的偏移地址可依次获取指定时间段内所有的消息索引记录的偏移地址。进一步地,根据所述相对起始单位时间和所述时间索引文件索引获取第一消息索引记录的偏移地址包括:计算第一时间索引记录在所述时间索引文件中的偏移地址;根据所获得的所述第一时间索引记录的偏移地址查询所述第一时间索引记录获取所述第一消息索引记录的偏移地址;其中,所述第一时间索引记录为相对起始单位时间对应的时间索引记录;所述第一时间索引记录的偏移地址是所述相对起始单位时间的数值乘以时间索引记录的长度值。进一步地,根据所述相对结束单位时间和所述时间索引文件索引获取第二消息索引记录的偏移地址包括:计算所述第二时间索引记录在所述时间索引文件中的偏移地址;根据所获得的所述第二时间索引记录的偏移地址查询所述第二时间索引记录获取中间偏移地址;将所述中间偏移地址减去消息索引记录的字节长度值从而获得所述第二消息索引记录的偏移地址;其中,所述第二时间索引记录为相对结束时间的下一单位时间对应的时间索引记录;所述第二时间索引记录的偏移地址是所述相对结束单位时间的数值加上1后再乘以时间索引记录的长度值。进一步地,每个消息主题对应一个所述时间索引文件、一个所述消息索引文件和至少一个所述数据文件。进一步地,所述方法还包括:创建第一个数据文件,所述第一个数据文件在预先设定的时间点创建和/或在存储此消息主题的第一条消息时创建;在所述数据文件大小达到预定的阈值时,创建新的数据文件。进一步地,消息在数据文件中存储方式为存储消息的前缀信息、消息的内容和消息的后缀信息;其中,所述消息的前缀信息和/或后缀信息用于隔离相邻消息。第二方面,提供一种服务器,包括:至少一个处理器;存储器,用于存储所述处理器可执行的指令;所述处理器被配置为执行上述任一项所述的方法。第三方面,一种计算机可读存储介质,其上存储计算机程序指令,所述计算机程序指令在被处理器执行时实现上述任一项所述的方法。在本实施例的消息持久化存储方法中,创建数据文件用于存储需要持久化的消息,创建消息索引文件和时间索引文件用于索引读取数据文件中的消息。通过创建消息索引文件以使得只需要读取数据文件一次便可以得到所需消息。通过创建时间索引文件可读取指定时间的消息。因此,所述方法可以方便快速的从数据文件中读取指定时间的消息。附图说明通过以下参照附图对本实施例的描述,本专利技术的上述以及其它目的、特征和优点将更为清楚,在附图中:图1是本实施例的消息持久化存储方法中文件的结构示意图;图2是本实施例的消息持久化方法的流程图;图3是本实施例的消息持久化方法中进行消息持久化的流程图;图4是本实施例的消息持久化方法中进行消息读取流程图;图5是本实施例的服务器的示意图。具体实施方式以下基于实施例对本专利技术进行描述,但是本专利技术并不仅仅限于这些实施例。在下文对本专利技术的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本专利技术。为了避免混淆本专利技术的实质,公知的方法、过程、流程、元件和电路并没有详细叙述。此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。在本专利技术的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本专利技术的描述中,除非另有说明,“多个”的含义是两个或两个以上。图1是本实施例的消息持久化方法中文件的结构示意图。如图1所示,在本实施例中,消息持久化存储过程中涉及的文件包括时间索引文件1、消息索引本文档来自技高网
...
一种消息持久化方法、服务器和计算机可读存储介质

【技术保护点】
一种消息持久化方法,包括:接收需要持久化的消息后,获取所述消息所属的消息主题;将所述消息存储在所述消息主题对应的数据文件中;定时更新消息索引文件,建立所述消息对应的消息索引记录,所述消息索引文件包括索引头和消息索引记录;以及在时间索引文件中,每隔单位时间生成一条时间索引记录;其中,所述消息索引文件和所述时间索引文件是在预先设定的时间点创建的;所述索引头包括参考时间戳,所述参考时间戳对应的参考时间作为存储消息时间点的参考;所述消息索引记录包括对应的数据文件标识、所述消息在所述数据文件中的偏移地址和相对时间戳,所述相对时间戳是存储消息时间点相对所述参考时间而得到的;所述时间索引记录用于存储在当前单位时间内存储的第一条消息对应的消息索引记录在所述消息索引文件中的偏移地址。

【技术特征摘要】
1.一种消息持久化方法,包括:接收需要持久化的消息后,获取所述消息所属的消息主题;将所述消息存储在所述消息主题对应的数据文件中;定时更新消息索引文件,建立所述消息对应的消息索引记录,所述消息索引文件包括索引头和消息索引记录;以及在时间索引文件中,每隔单位时间生成一条时间索引记录;其中,所述消息索引文件和所述时间索引文件是在预先设定的时间点创建的;所述索引头包括参考时间戳,所述参考时间戳对应的参考时间作为存储消息时间点的参考;所述消息索引记录包括对应的数据文件标识、所述消息在所述数据文件中的偏移地址和相对时间戳,所述相对时间戳是存储消息时间点相对所述参考时间而得到的;所述时间索引记录用于存储在当前单位时间内存储的第一条消息对应的消息索引记录在所述消息索引文件中的偏移地址。2.根据权利要求1所述的消息持久化方法,其特征在于,所述方法还包括:在接收到读取指定时间段内消息的指令时根据所述时间索引文件和所述消息索引文件索引并读取对应数据文件中对应的消息。3.根据权利要求2所述的消息持久化方法,其特征在于,根据所述时间索引文件和所述消息索引文件索引并读取对应数据文件中对应的消息包括:根据所述参考时间戳获取所述指定时间段的相对起始单位时间和相对结束单位时间;根据所述相对起始单位时间和所述时间索引文件索引获取第一消息索引记录的偏移地址;根据所述相对结束单位时间和所述时间索引文件索引获取第二消息索引记录的偏移地址;在所述消息索引文件中获取所述第一消息索引记录的偏移地址和第二消息索引记录的偏移地址之间的所有消息索引记录;根据所获取的消息索引记录读取对应的数据文件获得指定时间段的所有消息;其中,根据所述第一消息索引记录的偏移地址依次加上一条消息索引记录的字节长度值直到得到所述第二消息索引记录的偏移地址可依次获取指定时间段内所有的消息索引记录的偏移地址。4.根据权利要求3所述的消息持久化方法,其特征在于,根据所述相对起始单位时间和所述时间索引文件索引获取第一消...

【专利技术属性】
技术研发人员:陈宇珽许再越熊璐李正茅廷余波李升先李志斌
申请(专利权)人:中汇信息技术上海有限公司
类型:发明
国别省市:上海,31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1