CN101707633B - 一种基于文件系统的消息中间件持久消息的存储方法 - Google Patents

一种基于文件系统的消息中间件持久消息的存储方法 Download PDF

Info

Publication number
CN101707633B
CN101707633B CN200910230963XA CN200910230963A CN101707633B CN 101707633 B CN101707633 B CN 101707633B CN 200910230963X A CN200910230963X A CN 200910230963XA CN 200910230963 A CN200910230963 A CN 200910230963A CN 101707633 B CN101707633 B CN 101707633B
Authority
CN
China
Prior art keywords
message
file
index
write
byte stream
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN200910230963XA
Other languages
English (en)
Other versions
CN101707633A (zh
Inventor
李景泽
谢钟扬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
CVIC Software Engineering Co Ltd
Original Assignee
CVIC Software Engineering Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by CVIC Software Engineering Co Ltd filed Critical CVIC Software Engineering Co Ltd
Priority to CN200910230963XA priority Critical patent/CN101707633B/zh
Publication of CN101707633A publication Critical patent/CN101707633A/zh
Application granted granted Critical
Publication of CN101707633B publication Critical patent/CN101707633B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明是一种基于文件系统的消息中间件持久消息的存储方法,包括如下步骤:第一步:以消息为参数创建AddMessageCommand;第二步:把AddMessageCommand对象序列化为字节流;第三步:将字节流写入日志文件,如果设置为异步模式,则将多个写入操作合并,将每个写入操作需写入的字节流合并,一次性写入到日志文件中;第四步:更新内存中的索引页,将消息标识符和消息对应于日志文件中的位置插入到索引树中的节点;第五步:写回索引文件。本发明提供了一种在保证消息存储的可靠性的同时,还提高了持久消息的读写性能的基于文件系统的消息中间件持久消息的存储方法。

Description

一种基于文件系统的消息中间件持久消息的存储方法
技术领域
本发明涉及一种基于文件系统的消息中间件持久消息的存储方法。
背景技术
以可靠传输为目的的消息中间件服务器,存储客户端发送给服务器端的消息是一个非常关键的环节。对消息的存储一般需要达到以下要求:
1)可靠性,能够将客户端发给服务器端的每条消息做持久化,能根据消息标识符定位到消息的准确存储位置。
2)性能,能够快速将消息在非易失性存储器和内存之间进行置换。
目前实现消息存储最常用的两种方式:
1.内存存储
将所有客户端发送给服务器端的消息保存在内存之中,由于所有消息均在内存中操作,采用这个方式的消息中间件吞吐性能非常高。但是该种方式存在以下问题:
如果服务器宕机,所有保存在内存之中的消息都将丢失,再次重启之后,这些消息无法被消费;
消息在内存中存储有容量限制,如果超出了可用的内存上限,将阻塞客户端的发送进程,直到这些消息被接收者取得而被服务器释放其所占用的内存。
2.数据库存储
将所有客户端发送给服务器端的消息保存在数据库之中,即使服务器宕机,重启之后消息中间件依然可以从数据库中恢复所有未被客户端接收的消息。但是该种方式存在以下问题:
在高负载的情况下,往数据库中频繁插入和删除消息记录的数据库操作会导致整个消息中间件消息吞吐性能严重降低。
绑定额外的数据库系统会降低服务器的处理性能和网络性能,还会增加用户的投资
综合以上两种方式,基于文件系统的消息中间件持久消息的存储技术需要解决可靠性问题,性能问题等。
发明内容
本发明的目的就是针对上述的不足,提供了一种在保证消息存储的可靠性的同时,还提高了持久消息的读写性能的基于文件系统的消息中间件持久消息的存储方法。
一种基于文件系统的消息中间件持久消息的存储方法,包括如下步骤:
第一步:以消息为参数创建AddMessageCommand。
即将AddMessageCommand的message字段设为需要存储的消息;将RemoveMessageCommand中的messageId设为需要从存储中删除的消息标识符。Visitor则提供了以访问者模式处理所有Command对象的方法,Visitor的子类IndexVisitor会根据不同的Command子类建立索引。
第二步:把AddMessageCommand对象序列化为字节流。
Command类提供了write和read序列化和反序列化的方法,write方法可以将Command对象序列化成字节流,read方法可以将字节流反序列化成Command对象。通过这样的方式,就可以将Command对象存储在日志文件中,也可以从日志文件读取内容生成Command对象。
第三步:将字节流写入日志文件,如果设置为异步模式,则将多个写入操作合并,将每个写入操作需写入的字节流合并,一次性写入到日志文件中。
第四步:更新内存中的索引页,将消息标识符和消息对应于日志文件中的位置插入到索引树中的节点。
索引信息存放在一个B+树的叶节点中,key对应于消息的标识符,value对应该消息在日志文件中的位置。每次在日志文件中添加一条消息记录,都会更新B+树更新索引信息。
每一个B+树节点都存放在索引文件中,每个节点占用的磁盘容量为4096个字节,在第一页中存放了整个索引的元数据,可以通过这个元数据找到所有队列的消息索引。由于内存容量的限制,并非将所有索引信息都存放在内存之中,而是通过设置索引页缓存保存最近使用的索引页。
第五步:写回索引文件,将更新的索引树节点所对应的文件页以双写的方式写回到索引文件。
每次更新索引文件都将需要更新的文件页全部顺序写入备份文件,当写入备份文件成功之后,再将这些文件页写回到索引文件,通过这样的方式来避免写回索引文件时宕机引起的索引文件不一致的问题。当写入备份文件不成功时,就直接丢弃这些需要更新的索引页,当写回索引页不成功时,则从备份文件恢复这些索引页。
然后设置一读取流程,具体来说为:
第一步:查找消息在日志文件中的位置,通过消息标识符在索引树上查找其对应的日志文件位置信息。
第二步:反序列化,读取日志文件,将读到的字节流反序列化成AddMessageCommand对象。
第三步:读取消息,从AddMessageCommand对象中取出消息。
本发明提供的基于文件系统的消息中间件持久消息的存储方法,具有如下优点:
1.可以做持久存储,即使宕机,也能保证在重启之后恢复所有的消息,将消息中间件运行状态恢复到宕机之前的运行状态。
2.可以根据消息标识符快速检索到消息,提高消息中间件消息的吞吐量。
附图说明
图1为本发明实施例中项向储子系统存储消息的流程图;
图2为本发明实施例中从存储子系统读取消息的流程图。
具体实施方式
下面以非限定性的实施方式来具体解释、说明本技术方案。
一种基于文件系统的消息中间件持久消息的存储方法,包括一存储步骤和一读取步骤。
存储步骤如图1所示,具体为:
第一步:以消息为参数创建AddMessageCommand,即将AddMessageCommand的message字段设为需要存储的消息;将RemoveMessageCommand中的messageId设为需要从存储中删除的消息标识符;
第二步:把AddMessageCommand对象序列化为字节流;
第三步:将字节流写入日志文件,如果设置为异步模式,则将多个写入操作合并,将每个写入操作需写入的字节流合并,一次性写入到日志文件中;
第四步:更新内存中的索引页,将消息标识符和消息对应于日志文件中的位置插入到索引树中的节点;
第五步:写回索引文件,将更新的索引树节点所对应的文件页以双写的方式写回到索引文件。
而读取步骤如图2所示,具体来说为:
第一步:查找消息在日志文件中的位置,通过消息标识符在索引树上查找其对应的日志文件位置信息。
第二步:反序列化,读取日志文件,将读到的字节流反序列化成AddMessageCommand对象。
第三步:读取消息,从AddMessageCommand对象中取出消息。

Claims (1)

1.一种基于文件系统的消息中间件持久消息的存储方法,其特征在于包括如下步骤:
第一步:以消息为参数创建AddMessageCommand,即将AddMessageCommand的message字段设为需要存储的消息;将RemoveMessageCommand中的messageId设为需要从存储中删除的消息标识符;
第二步:把AddMessageCommand对象序列化为字节流;
第三步:将字节流写入日志文件,如果设置为异步模式,则将多个写入操作合并,将每个写入操作需写入的字节流合并,一次性写入到日志文件中;
第四步:更新内存中的索引页,将消息标识符和消息对应于日志文件中的位置插入到索引树中的节点;
第五步:写回索引文件,将更新的索引树节点所对应的文件页以双写的方式写回到索引文件。
CN200910230963XA 2009-11-27 2009-11-27 一种基于文件系统的消息中间件持久消息的存储方法 Active CN101707633B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN200910230963XA CN101707633B (zh) 2009-11-27 2009-11-27 一种基于文件系统的消息中间件持久消息的存储方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200910230963XA CN101707633B (zh) 2009-11-27 2009-11-27 一种基于文件系统的消息中间件持久消息的存储方法

Publications (2)

Publication Number Publication Date
CN101707633A CN101707633A (zh) 2010-05-12
CN101707633B true CN101707633B (zh) 2012-08-22

Family

ID=42377821

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200910230963XA Active CN101707633B (zh) 2009-11-27 2009-11-27 一种基于文件系统的消息中间件持久消息的存储方法

Country Status (1)

Country Link
CN (1) CN101707633B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102508765A (zh) * 2011-11-17 2012-06-20 深圳市中兴移动通信有限公司 一种通过进程间通信实现软件日志实时监控的方法
CN102622407B (zh) * 2012-01-29 2014-03-26 广州亦云信息技术有限公司 日志文件操作系统及日志文件管理方法
CN102868564A (zh) * 2012-10-10 2013-01-09 山东中创软件商用中间件股份有限公司 一种消息持久化方法及系统
CN103607476B (zh) * 2013-12-05 2017-05-17 上海普坤信息科技有限公司 海量消息的分布式多阶段持久化的系统及方法
CN104794119B (zh) * 2014-01-17 2018-04-03 阿里巴巴集团控股有限公司 用于中间件消息的存储与传输方法及系统
CN105740083A (zh) * 2016-01-28 2016-07-06 努比亚技术有限公司 消息处理方法、装置及系统
CN107295106B (zh) * 2017-07-31 2020-08-14 杭州多麦电子商务股份有限公司 消息数据服务集群
CN110019001B (zh) * 2017-08-17 2021-07-06 中国电信股份有限公司 提升消息中间件消息追踪能力的方法、系统和监控模块
CN110213317B (zh) * 2018-07-18 2021-10-29 腾讯科技(深圳)有限公司 消息存储的方法、装置及存储介质
CN110209554B (zh) * 2019-06-14 2023-08-11 上海中通吉网络技术有限公司 数据库日志分发方法、装置及设备
CN111049729A (zh) * 2019-11-29 2020-04-21 苏州浪潮智能科技有限公司 一种持久化消息传输方法与装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1851672A (zh) * 2006-04-05 2006-10-25 北京飞天诚信科技有限公司 一种闪存的安全读写方法
WO2007025831A1 (en) * 2005-08-31 2007-03-08 International Business Machines Corporation A method for managing i/o

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007025831A1 (en) * 2005-08-31 2007-03-08 International Business Machines Corporation A method for managing i/o
CN1851672A (zh) * 2006-04-05 2006-10-25 北京飞天诚信科技有限公司 一种闪存的安全读写方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
华北.浅谈消息中间件技术的原理与应用.《中国科技信息》.2005,(第12期), *
陈明,潘家铭,阎保平.消息中间件的设计与实现.《微电子学与计算机》.2005,(第4期), *

Also Published As

Publication number Publication date
CN101707633A (zh) 2010-05-12

Similar Documents

Publication Publication Date Title
CN101707633B (zh) 一种基于文件系统的消息中间件持久消息的存储方法
US7844643B2 (en) Storage management system with integrated continuous data protection and remote copy
CN100578470C (zh) 基于裸设备的音视频数据存取方法和装置
CN103514106B (zh) 一种数据缓存方法
CN106951375B (zh) 在存储系统中删除快照卷的方法及装置
CN105183839A (zh) 一种基于Hadoop的小文件分级索引的存储优化方法
CN103595797B (zh) 一种分布式存储系统中的缓存方法
CN103838830A (zh) 一种HBase数据库的数据管理方法及系统
CN103246696A (zh) 高并发数据库的访问方法及应用于多服务器系统的方法
CN103226965B (zh) 基于时间位图的音视频数据存取方法
CN113377292B (zh) 一种单机存储引擎
KR20200056357A (ko) 데이터베이스 관리 시스템에서의 변경 데이터 캡쳐 구현 기법
KR20200056526A (ko) 데이터베이스 관리 시스템에서의 변경 데이터 캡쳐 구현 기법
CN102024060B (zh) 存储文件及恢复误删除文件的方法
US20080320062A1 (en) Method of transferring file system, file system transference program, and file system transference device
CN113961153A (zh) 一种索引数据写入磁盘的方法、装置及终端设备
CN114281762A (zh) 一种日志存储加速方法、装置、设备及介质
CN103136215A (zh) 存储系统的数据读写方法和装置
CN111163297A (zh) 一种实现视频监控云存储高并发和快速回放的方法
CN103207916A (zh) 元数据处理的方法和装置
EP4174675A1 (en) On-board data storage method and system
CN111241090B (zh) 存储系统中管理数据索引的方法和装置
CN105677579A (zh) 缓存系统中的数据访问方法和系统
CN111245933A (zh) 一种基于日志的对象存储追加写实现方法
CN103177026A (zh) 数据管理方法和数据管理系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant