CN103209214A - 一种基于NoSQL的消息中间件的实现方法 - Google Patents
一种基于NoSQL的消息中间件的实现方法 Download PDFInfo
- Publication number
- CN103209214A CN103209214A CN201310116696XA CN201310116696A CN103209214A CN 103209214 A CN103209214 A CN 103209214A CN 201310116696X A CN201310116696X A CN 201310116696XA CN 201310116696 A CN201310116696 A CN 201310116696A CN 103209214 A CN103209214 A CN 103209214A
- Authority
- CN
- China
- Prior art keywords
- message
- nosql
- thread
- journal file
- theme
- 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.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于NoSQL的消息中间件的实现方法,包括缓存转发和宕机恢复。在NoSQL中,数据的访问控制都在内存中进行,读写速度很高。把消息存储在NoSQL中,可保证消息缓存的高效,在对消息进行查找时能利用内存读写速度的优势,更快地定位消息。配合日志文件,更能保证在消息中间件服务器宕机后消息不丢失,并在重启后能恢复宕机前的消息。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于NoSQL的消息中间件的实现方法。
背景技术
消息中间件服务器,作为一个高效传输和可靠的中转站,消息的传输和存储是一个关键的环节。
消息服务器主要有以下两种要求:
1)可靠的存储
适合于消息需要可靠传输的应用环境。一般利用文件或数据库作为消息的存储方式,内存开销小,即使服务器宕机,重启后仍可从持久存储中恢复上一次已存储的消息。但以文件或数据库作为存储介质,在高负载的情况下,频繁I/O操作会降低消息中间件的吞吐量。
2)高效的传输
适合对性能要求非常苛刻,但是消息无需可靠持久的应用环境。基于内存来进行消息的高效缓存与转发,但在服务器宕机后不能保存消息。
此外,消息中间件对于数据集成和***整合是非常重要的,以中间件为接口的各子***通信,可避免子***间的各种差异所带来的复杂性,如硬件平台、网络协议、开发语言所引起的。消息的时效、消息的持久、消息传输的高效性更值得关注。
针对以上不足提出了一种基于内存存储的NoSQL结合日志文件,既可解决消息服务的性能问题,也提供消息的可靠存储。
发明内容
本发明的目的是为了克服现有技术的缺陷,提供一种基于NoSQL的消息中间件的实现方法,在NoSQL中,数据的访问控制都在内存中进行,读写速度很高。把消息存储在NoSQL中,可保证消息缓存的高效,在对消息进行查找时能利用内存读写速度的优势,更快地定位消息。配合日志文件,更能保证在消息中间件服务器宕机后消息不丢失,并在重启后能恢复宕机前的消息。
一种基于NoSQL的消息中间件的实现方法,包括缓存转发和宕机恢复:
1缓存转发:
第一步:获取消息的参数,参数中包括了消息的内容和路由机制及服务质量等。主要有消息的内容,发送者和接收者的地址或主题,开始传输时间,有效期,优先级,由以上内容决定了在消息中间件的存储内容及发送时机。
第二步:对参数进行封装和序列化,序列化后的内容可以很方便地存储在日志文件和NoSQL中,也能从日志文件和NoSQL中通过反序列化得出原来的各种参数。
第三步:消息发送与存储,由四个线程(池)处理。
线程池A:监听指定的端口,接收消息。符合条件的消息立即发送,不符合发送条件的消息经过筛选后发给线程B做持久化处理。
线程B:把消息和标志域写入日志文件,标志域有新增、修改、删除。
线程C:把消息写入NoSQL。
线程D:对延迟发送或者发送失败但未超出最迟交付时间的消息进行重新发送。
2宕机恢复:
如果服务程序宕机,重启后可从日志文件中恢复重启前的消息。主要处理工作为:
1)从日志文件读取内容,对标志域进行判断,恢复重启前的消息。
2)把恢复后的消息写入文件,覆盖原来的日志文件。
3)把恢复后的消息存入NoSQL。
本发明提供的基于NoSQL的消息中间件带来的有益效果:
1)利用NoSQL做为缓存,可快速检索消息,提高消息中间件的吞吐量。
2)利用日志文件作为持久存储,即使在宕机时,也能保证在重启之后恢复所有的消息,将消息恢复成合理的状态。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例中***存储发送消息的流程图;
图2为本发明实施中宕机恢复的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
一种基于NoSQL的消息中间件的实现方法,包括缓存转发和宕机恢复。
缓存转发如图1所示,具体为:
第一步:获取消息的参数。
消息由两部分组成,包括消息头和消息体。
1)消息头内容有:
a)消息的发送者和接收者的地址或者消息的主题,可有多个地址对或主题,每个地址对或主题对应有相应的一组质量要求。
b)消息的服务质量要求。包括开始传输时间、有效期、优先级,每组质量要求对应一个地址队或主题。
2)消息体包含需传输和存储的消息内容。一个消息体可以有多个不同的消息头。
第二步:对参数进行封装和序列化。
可用JSON、XML、protobuf进行序列化和反序列化。
为方便后面的发送,在这里根据开始传输时间和有效期计算出最迟交付时间,用最迟交付时间替换有效期。并从服务器获取唯一的序列号做为键,把其余内容做为序列化后值,将此键值对发给第三步的线程池A。
第三步:消息发送与存储,由四个线程(池)处理。
线程池A:循环处理,步骤如下:
1)监听指定的端口,接收消息。
2)把接收到的消息按优先级从高到低排队,按以下次序处理:
a)如果当前时间处于开始传输时间和最迟交付时间,则依据消息的路由规则发送给接收端。
b)清除过期消息。如果当前时间已超出最迟交付时间或发送成功后,则删除此交付时间对应的地址对或主题;若地址对或主题全部删除,则删除此消息。
c)如果未到开始传输时间,则不发送。
3)把未发送的消息加上新增标志发送给线程B。
4)转到1)。
线程B:把消息和标志域写入日志文件。循环处理,步骤如下:
1)接收消息。
2)持久化消息。解析出消息中的标志域,将标志和消息内容以增加的方式写入存储文件。如果标志域是新增则把此消息发送给线程C。
3)转到1)。
线程C:把消息写入NoSQL。循环处理,步骤如下:
1)接收消息。
2)把消息写入NoSQL。
3)转到1)。
线程D:对延迟发送或者发送失败但未超出最迟交付时间的消息进行重新发送,循环处理,步骤如下:
1)从NoSQL取消息,如果当前时间小于开始传输时间,则不取。
2)如果当前时间处于开始传输时间和最迟交付时间,则发送。
3)清除过期消息。如果当前时间已超出最迟交付时间或发送成功后,则删除此交付时间对应的地址对或主题,若地址对或主题未全部删除更新此消息在NoSQL中的内容;若地址对或主题全部删除,则从NoSQL删除此消息。如果消息是整条删除,则发送删除标志域和消息的序列号给线程B;如果是部分删除地址对或主题,则发送修改标志域和消息的序列号和未删除的地址对或主题给线程B。
4)转到1)。
宕机恢复如图2所示,具体为:
如果服务程序宕机,重启后可从日志文件中恢复重启前的消息。步骤如下:
1)线程池A、线程B、线程D暂不启动。
2)从日志文件的最后开始读,每读一行,需对标志域进行判断。如果标志域是删除,有关此条消息的所有内容都可以忽略;如果标志域是新增,那么这条消息必须恢复;如果标志域是删除,那么当前在文件中的这条消息的消息头需缓存,读取到此消息的消息体后再与消息头组合。
3)读到文件头后,把所恢复的消息以新增标志域写入临时文件。写入完成后,用此临时文件替换原线程B的日志文件。
4)启动线程C,把所有恢复后的消息发送给线程C。
5)按次序启动线程B、线程D、线程池A。
6)此恢复线程退出。
以上对本发明实施例所提供的一种基于NoSQL的消息中间件的实现方法进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (7)
1.一种基于NoSQL的消息中间件的实现方法,其特征在于,包括缓存转发和宕机恢复,其中,缓存转发包括获取消息的参数,对参数进行封装和序列化,消息发送与存储;宕机恢复包括从日志文件读取内容,对标志域进行判断,恢复重启前的消息,把恢复后的消息写入文件,覆盖原来的日志文件,把恢复后的消息存入NoSQL。
2.根据权利要求1所述的方法,其特征在于,消息的参数包括消息的内容、路由机制及服务质量,具体包括消息的发送者和接收者的地址或者消息的主题,服务质量包括开始传输时间、有效期、优先级。
3.根据权利要求2所述的方法,其特征在于,消息的发送者和接收者或者消息的主题有多个地址对或主题,每个地址对或主题对应相应的一组质量要求。
4.根据权利要求1所述的方法,其特征在于,序列化后的内容存储在日志文件和NoSQL中,也能从日志文件和NoSQL中通过反序列化得出原来的各种参数。
5.根据权利要求1所述的方法,其特征在于,消息发送与存储,由线程池和线程处理,其中,
线程池A:监听指定的端口,接收消息,符合条件的消息立即发送,不符合发送条件的消息经过筛选后发给线程B做持久化处理;
线程B:把消息和标志域写入日志文件,标志域有新增、修改、删除;
线程C:把消息写入NoSQL;
线程D:对延迟发送或者发送失败但未超出最迟交付时间的消息进行重新发送。
6.根据权利要求1或4所述的方法,其特征在于,用JSON、XML、protobuf进行序列化和反序列化。
7.根据权利要求1或2或5所述的方法,其特征在于,在序列化和反序列化时为方便后面的发送,根据开始传输时间和有效期计算出最迟交付时间,用最迟交付时间替换有效期,并从服务器获取唯一的序列号做为键,把其余内容做为序列化后值,将此键值对发给线程池A。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310116696XA CN103209214A (zh) | 2013-04-03 | 2013-04-03 | 一种基于NoSQL的消息中间件的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310116696XA CN103209214A (zh) | 2013-04-03 | 2013-04-03 | 一种基于NoSQL的消息中间件的实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103209214A true CN103209214A (zh) | 2013-07-17 |
Family
ID=48756298
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310116696XA Pending CN103209214A (zh) | 2013-04-03 | 2013-04-03 | 一种基于NoSQL的消息中间件的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103209214A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105740083A (zh) * | 2016-01-28 | 2016-07-06 | 努比亚技术有限公司 | 消息处理方法、装置及*** |
CN107295106A (zh) * | 2017-07-31 | 2017-10-24 | 杭州多麦电子商务股份有限公司 | 消息数据服务集群 |
CN108848031A (zh) * | 2018-06-14 | 2018-11-20 | 深圳金证引擎科技有限公司 | 信息传输方法及装置 |
CN109446216A (zh) * | 2018-09-12 | 2019-03-08 | 珠海凡泰极客科技有限责任公司 | 一种支持sql语法的消息*** |
CN109710421A (zh) * | 2018-11-16 | 2019-05-03 | 深圳证券交易所 | 消息中间件的接收者异常处理方法、服务器及存储介质 |
CN110943855A (zh) * | 2019-11-19 | 2020-03-31 | 山东超越数控电子股份有限公司 | 一种通过bmc实现服务器宕机后状态恢复的方法 |
CN111552575A (zh) * | 2019-12-31 | 2020-08-18 | 远景智能国际私人投资有限公司 | 基于消息队列的消息消费方法、装置及设备 |
CN111930531A (zh) * | 2020-07-01 | 2020-11-13 | 北京奇艺世纪科技有限公司 | 数据处理、数据生产、数据消费方法、装置、设备及介质 |
CN112015523A (zh) * | 2020-08-03 | 2020-12-01 | 北京奇艺世纪科技有限公司 | 事件防丢失方法、装置、电子设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102012944A (zh) * | 2010-12-16 | 2011-04-13 | 四川川大智胜软件股份有限公司 | 一种提供复制特性的分布式nosql数据库 |
CN102279750A (zh) * | 2011-08-30 | 2011-12-14 | 浙江大学 | 一种基于领域知识共享的迭代式代码生成方法 |
US20120226658A1 (en) * | 2011-03-04 | 2012-09-06 | Red Hat, Inc. | Data model versioning for document databases |
CN102880475A (zh) * | 2012-10-23 | 2013-01-16 | 上海普元信息技术股份有限公司 | 计算机软件***中基于云计算的实时事件处理***及方法 |
CN102982075A (zh) * | 2012-10-30 | 2013-03-20 | 北京京东世纪贸易有限公司 | 支持访问异构数据源的***和方法 |
CN102982130A (zh) * | 2012-11-16 | 2013-03-20 | 深圳市融创天下科技股份有限公司 | 一种nosql与rdbms的数据库同步方法和*** |
-
2013
- 2013-04-03 CN CN201310116696XA patent/CN103209214A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102012944A (zh) * | 2010-12-16 | 2011-04-13 | 四川川大智胜软件股份有限公司 | 一种提供复制特性的分布式nosql数据库 |
US20120226658A1 (en) * | 2011-03-04 | 2012-09-06 | Red Hat, Inc. | Data model versioning for document databases |
CN102279750A (zh) * | 2011-08-30 | 2011-12-14 | 浙江大学 | 一种基于领域知识共享的迭代式代码生成方法 |
CN102880475A (zh) * | 2012-10-23 | 2013-01-16 | 上海普元信息技术股份有限公司 | 计算机软件***中基于云计算的实时事件处理***及方法 |
CN102982075A (zh) * | 2012-10-30 | 2013-03-20 | 北京京东世纪贸易有限公司 | 支持访问异构数据源的***和方法 |
CN102982130A (zh) * | 2012-11-16 | 2013-03-20 | 深圳市融创天下科技股份有限公司 | 一种nosql与rdbms的数据库同步方法和*** |
Non-Patent Citations (1)
Title |
---|
沈铢: "NoSQL数据库技术及其应用研究", 《中国优秀硕士学位论文数据库》, 15 September 2012 (2012-09-15) * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105740083A (zh) * | 2016-01-28 | 2016-07-06 | 努比亚技术有限公司 | 消息处理方法、装置及*** |
CN107295106B (zh) * | 2017-07-31 | 2020-08-14 | 杭州多麦电子商务股份有限公司 | 消息数据服务集群 |
CN107295106A (zh) * | 2017-07-31 | 2017-10-24 | 杭州多麦电子商务股份有限公司 | 消息数据服务集群 |
CN108848031A (zh) * | 2018-06-14 | 2018-11-20 | 深圳金证引擎科技有限公司 | 信息传输方法及装置 |
CN109446216A (zh) * | 2018-09-12 | 2019-03-08 | 珠海凡泰极客科技有限责任公司 | 一种支持sql语法的消息*** |
CN109710421A (zh) * | 2018-11-16 | 2019-05-03 | 深圳证券交易所 | 消息中间件的接收者异常处理方法、服务器及存储介质 |
CN109710421B (zh) * | 2018-11-16 | 2020-12-08 | 深圳证券交易所 | 消息中间件的接收者异常处理方法、服务器及存储介质 |
CN110943855A (zh) * | 2019-11-19 | 2020-03-31 | 山东超越数控电子股份有限公司 | 一种通过bmc实现服务器宕机后状态恢复的方法 |
CN111552575A (zh) * | 2019-12-31 | 2020-08-18 | 远景智能国际私人投资有限公司 | 基于消息队列的消息消费方法、装置及设备 |
CN111552575B (zh) * | 2019-12-31 | 2023-09-12 | 远景智能国际私人投资有限公司 | 基于消息队列的消息消费方法、装置及设备 |
CN111930531A (zh) * | 2020-07-01 | 2020-11-13 | 北京奇艺世纪科技有限公司 | 数据处理、数据生产、数据消费方法、装置、设备及介质 |
CN111930531B (zh) * | 2020-07-01 | 2023-08-18 | 北京奇艺世纪科技有限公司 | 数据处理、数据生产、数据消费方法、装置、设备及介质 |
CN112015523A (zh) * | 2020-08-03 | 2020-12-01 | 北京奇艺世纪科技有限公司 | 事件防丢失方法、装置、电子设备及存储介质 |
CN112015523B (zh) * | 2020-08-03 | 2023-09-01 | 北京奇艺世纪科技有限公司 | 事件防丢失方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103209214A (zh) | 一种基于NoSQL的消息中间件的实现方法 | |
CN106021315B (zh) | 一种应用程序的日志管理方法及*** | |
US20150189030A1 (en) | Message processing method, device and system for Internet of Things | |
US20150312054A1 (en) | Reducing encapsulation overhead in overlay-based networks | |
US9025608B2 (en) | Route switching device and data cashing method thereof | |
US9769280B2 (en) | Cooperative decentralized caching | |
CN104092717A (zh) | 消息处理方法及***、消息目的端设备与分布式消息*** | |
CN102710763B (zh) | 一种分布式缓存池化、分片及故障转移的方法及*** | |
CN104166589A (zh) | 一种心跳包的处理方法和装置 | |
CN105653198A (zh) | 数据处理方法及装置 | |
CN103500120A (zh) | 基于多线程异步双写的分布式缓存高可用处理方法及*** | |
CN105959346A (zh) | 基于服务器集群的数据处理***及方法 | |
CN102142032A (zh) | 一种分布式文件***的数据读写方法及*** | |
CN106713470A (zh) | 一种分布式缓存更新方法及缓存更新*** | |
CN104410655A (zh) | 基于命名机制的分布式网络的存储***及方法 | |
US20120059832A1 (en) | Portable Hash-Based Key Location Mechanism | |
CN104461929B (zh) | 基于***的分布式数据缓存方法 | |
CN110740145A (zh) | 消息消费方法、装置、存储介质及电子设备 | |
CN102821045B (zh) | 多播报文复制方法及装置 | |
CN104866528A (zh) | 多平台数据采集方法及*** | |
CN102891797A (zh) | 支持消息持久化的发布订阅方法 | |
CN102510407A (zh) | 一种对博客进行读、写操作的方法及*** | |
CN104618152A (zh) | 一种会话表老化方法及*** | |
CN103399943A (zh) | 集群数据库并行查询的通讯方法和通讯装置 | |
JP6364727B2 (ja) | 情報処理システム、分散処理方法、及び、プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130717 |