CN110381023B - 一种基于mqtt协议的消息存储方法 - Google Patents
一种基于mqtt协议的消息存储方法 Download PDFInfo
- Publication number
- CN110381023B CN110381023B CN201910514707.7A CN201910514707A CN110381023B CN 110381023 B CN110381023 B CN 110381023B CN 201910514707 A CN201910514707 A CN 201910514707A CN 110381023 B CN110381023 B CN 110381023B
- Authority
- CN
- China
- Prior art keywords
- message
- queue
- mqtt
- data
- file
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 10
- 238000013507 mapping Methods 0.000 claims description 5
- 230000004048 modification Effects 0.000 claims description 3
- 238000012986 modification Methods 0.000 claims description 3
- 230000004044 response Effects 0.000 claims description 2
- 238000004891 communication Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 1
- 238000012958 reprocessing Methods 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/12—Protocols specially adapted for proprietary or special-purpose networking environments, e.g. medical networks, sensor networks, networks in vehicles or remote metering networks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/06—Notations for structuring of protocol data, e.g. abstract syntax notation one [ASN.1]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/26—Special purpose or proprietary protocols or architectures
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Medical Informatics (AREA)
- Information Transfer Between Computers (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供一种基于MQTT协议的消息存储方法,属于物联网数据采集和存储范畴技术领域,本发明根据MQTT协议对MQTT Broker进行改造,使MQTT Broker可存储、发送任意消息,将基于MQTT协议的设备发送的消息接收后存储,再利用GET接口从消息队列中拉取消息。能够快速、大量、持久化接收过来的消息,且提供为分析人员拉取消息的接口,使其能够根据需要获取指定队列的消息。
Description
技术领域
本发明涉及物联网数据采集和存储范畴领域,尤其涉及一种基于MQTT协议的消息存储方法。
背景技术
物联网即万物相连的互联网,将各种信息传感设备与互联网结合起来而形成的一个巨大网络,实现在任何时间、任何地点,人、机、物的互联互通。MQTT 协议是物联网协议的一种,是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议。
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅模式的轻量级通讯协议。做为一种低开销、低带宽占用的即时通讯协议,使用在物联网、小型设备、移动应用等方面。
MQTT并没有队列,MQTT Broker(代理)收到某个Topic的消息,会把消息转发给所有订阅该Topic设备。仅仅在如下情况下存储少量消息:
1、发送消息者在发送消息时带有retain标志为true是,Broker将存储这条消息,如果有设备订阅这个Topic,Broker将把这条消息发给该设备。
2、当订阅方连接Broker带着clean session为false标志时,且设备离线时,Broker 将保存订阅者未收到的消息。当设备在线后,会将保存的消息发送给客户端。
然后,在现实中,我们需要把某些设备上报的消息进行存储,交给数据分析人员进行分析、汇总。此时MQTT协议就不能完全支持了。
发明内容
为了解决以上技术问题,本发明提出了一种基于MQTT协议的消息存储方法,将基于MQTT协议的设备发送的消息接收后存储,以便分析人员对数据进行分析、再处理。
本发明的技术方案是:
一种基于MQTT协议的消息存储方法,根据MQTT协议对MQTT Broker进行改造,使MQTT Broker可存储、发送任意消息,将基于MQTT协议的设备发送的消息接收后存储,再利用GET接口从消息队列中拉取消息。
进一步的,消息队列基于内存映射文件,且消息队列内嵌于MQTT Broker中。
再进一步的,基于MQTT协议且在Broker接收到客户端PUBLISH消息时,将其存入相应的消息队列中,并不再将消息发送给在线的订阅者。
从消息队列拉取消息时,利用MQTT协议中的SUBSCRIBE帧,且订阅Topic 名字中含有@符号,符号前是Topic名字,符号后是要从队列取的消息数目。从队列拉取消息的格式是先读取消息的长度,再读取指定长度的消息内容。
进一步的,
消息存储:
消息存储主要是基于内存映射文件,队列的大小不限,每个队列用数据文件、元数据文件、页索引文件表示;其中数据文件存放真实数据;元数据文件存放队列的头指针所在页索引的位置;页索引每项存放数据页索引、信息偏移量、信息长度信息。
每个队列由若干个数据文件组成,每个数据文件大小为128MB;当数据入队、出队时更新相应的数据文件、元数据文件、页索引文件。
MQTT Broker改造:
MQTT Broker在接收PUBLISH类型的消息时,将其存入相应的队列中,队列名为其发布的Topic名字;
MQTT Broker在接收SUBSCRIBE类型的消息时,根据Topic的名字进行判断,如果Topic名字中含有@符号,其它形式认为非法。
从队列中取出消息发送给订阅者,并且不再回复订阅着应答消息,仅仅发送从相应队列取出的消息;取出的消息仍然封装成原有的PublishMessage帧的形式。
进一步的,PublishMessage帧的负载由消息长度、消息内容组成;当客户端接收到PublishMessage时,先读取消息长度,再读取固定长度的消息内容,直到负载读取完毕。
本发明的有益效果是
本发明解决了基于MQTT协议接收过来的消息无法大量存储的问题,并且为数据分析人员提供了数据基础。本发明能够快速、大量、持久化接收过来的消息,且提供为分析人员拉取消息的接口,使其能够根据需要获取指定队列的消息。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明基于MQTT协议将物联网信息进行收集、存储,根据MQTT协议对 MQTTBroker进行改造,使其能存储大量消息,能发送任意消息;存储量的大小根据磁盘来定。分析人员根据提供的GET接口(由MQTT协议的SUBSCRIBE改造)能够从队列中拉取到消息。
具体工作步骤如下:
(1)、基于MQTT协议且在Broker接收到客户端PUBLISH消息时,将其存入相应的队列中,并不再将消息发送给在线的订阅者。
(2)、从消息队列取消息时,是利用MQTT协议中的SUBSCRIBE帧,且订阅 Topic名字中含有@符号,符号前是Topic名字,符号后是要从队列取的消息数目。
(3)、从队列拉取消息的格式是先读取消息的长度,再读取指定长度的消息内容。
其中,
消息存储方案:
消息存储主要是基于内存映射文件,队列的大小不限,仅受磁盘容量的影响。每个队列用数据文件、元数据文件、页索引文件表示。其中数据文件存放真实数据;元数据文件存放队列的头指针所在页索引的位置;页索引每项存放数据页索引、信息偏移量、信息长度等信息。
每个队列由若干个数据文件组成,每个数据文件大小为128MB。当数据入队、出队时更新相应的数据文件、元数据文件、页索引文件。
MQTT Broker改造方案:
MQTT Broker在接收PUBLISH类型的消息时,无论服务质量是 AT_MOST_ONCE、AT_LEAST_ONCE、EXACTLY_ONCE,都将其存入相应的队列中,队列名为其发布的Topic名字,并且不在向在线的订阅者发布消息。
MQTT Broker在接收SUBSCRIBE类型的消息时,根据Topic的名字进行判断,如果Topic名字中含有@符号,名字形式如name@num,其它形式认为非法。则从队列名为name的队列中取出num条消息发送给订阅者。并且不再回复订阅着应答消息,仅仅发送从相应队列取出的消息。取出的消息仍然封装成原有的 PublishMessage帧的形式,方便客户端利用MQTT协议进行解析。PublishMessage 帧的负载有消息长度、消息内容组成。当客户端接收到PublishMessage时,先读取消息长度,再读取固定长度的消息内容,直到负载读取完毕。
以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (2)
1.一种基于MQTT协议的消息存储方法,其特征在于,
根据MQTT协议对MQTT Broker进行改造,使MQTT Broker可存储、发送任意消息,将基于MQTT协议的设备发送的消息接收后存储,再利用GET接口从消息队列中拉取消息;
消息队列基于内存映射文件,且消息队列内嵌于MQTT Broker中;
基于MQTT协议且在Broker 接收到客户端PUBLISH消息时,将其存入相应的消息队列中,并不再将消息发送给在线的订阅者;
从消息队列拉取消息时,利用MQTT协议中的SUBSCRIBE帧,且订阅Topic名字中含有@符号,符号前是Topic名字,符号后是要从队列取的消息数目;
从队列拉取消息的格式是先读取消息的长度,再读取指定长度的消息内容;
消息存储:
消息存储主要是基于内存映射文件,队列的大小不限,每个队列用数据文件、元数据文件、页索引文件表示;其中数据文件存放真实数据;元数据文件存放队列的头指针所在页索引的位置;页索引每项存放数据页索引、信息偏移量、信息长度信息;
每个队列由若干个数据文件组成,每个数据文件大小为128MB;当数据入队、出队时更新相应的数据文件、元数据文件、页索引文件;
MQTT Broker改造:
MQTT Broker在接收PUBLISH类型的消息时,将其存入相应的队列中,队列名为其发布的Topic名字;
MQTT Broker 在接收SUBSCRIBE类型的消息时,根据Topic的名字进行判断,如果Topic名字中含有@符号,那么其它形式认为非法;
从队列中取出消息发送给订阅者,并且不再回复订阅着应答消息,仅仅发送从相应队列取出的消息;取出的消息仍然封装成原有的PublishMessage帧的形式。
2.如权利要求1所述的方法,其特征在于,
PublishMessage帧的负载由消息长度、消息内容组成;当客户端接收到PublishMessage时,先读取消息长度,再读取固定长度的消息内容,直到负载读取完毕。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910514707.7A CN110381023B (zh) | 2019-06-14 | 2019-06-14 | 一种基于mqtt协议的消息存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910514707.7A CN110381023B (zh) | 2019-06-14 | 2019-06-14 | 一种基于mqtt协议的消息存储方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110381023A CN110381023A (zh) | 2019-10-25 |
CN110381023B true CN110381023B (zh) | 2022-02-18 |
Family
ID=68250305
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910514707.7A Active CN110381023B (zh) | 2019-06-14 | 2019-06-14 | 一种基于mqtt协议的消息存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110381023B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110943911B (zh) * | 2019-12-19 | 2022-05-31 | 北京轻元科技有限公司 | 基于protobuf的物联网高效数据传输方法 |
CN111786953B (zh) * | 2020-06-01 | 2022-11-01 | 杭州迪普科技股份有限公司 | 一种安全防护方法、装置和安全管理设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104378415A (zh) * | 2014-10-29 | 2015-02-25 | 中国建设银行股份有限公司 | 一种基于消息的高可用云系统和实现方法 |
CN105068769A (zh) * | 2015-08-28 | 2015-11-18 | 浪潮软件股份有限公司 | 一种基于消息中间件的消息管理方法及装置 |
CN106130882A (zh) * | 2016-07-13 | 2016-11-16 | 北京百度网讯科技有限公司 | 用于传输消息的方法和装置 |
CN109040186A (zh) * | 2018-06-30 | 2018-12-18 | 湖北海纳天鹰科技发展有限公司 | 一种基于nbiot网络的mqtt数据处理方法和装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3331197B1 (en) * | 2016-12-02 | 2020-08-26 | Advanced Digital Broadcast S.A. | A method and system for monitoring a connection status of a device |
US10432535B2 (en) * | 2017-02-28 | 2019-10-01 | Hewlett Packard Enterprise Development Lp | Performing a specific action on a network packet identified as a message queuing telemetry transport (MQTT) packet |
-
2019
- 2019-06-14 CN CN201910514707.7A patent/CN110381023B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104378415A (zh) * | 2014-10-29 | 2015-02-25 | 中国建设银行股份有限公司 | 一种基于消息的高可用云系统和实现方法 |
CN105068769A (zh) * | 2015-08-28 | 2015-11-18 | 浪潮软件股份有限公司 | 一种基于消息中间件的消息管理方法及装置 |
CN106130882A (zh) * | 2016-07-13 | 2016-11-16 | 北京百度网讯科技有限公司 | 用于传输消息的方法和装置 |
CN109040186A (zh) * | 2018-06-30 | 2018-12-18 | 湖北海纳天鹰科技发展有限公司 | 一种基于nbiot网络的mqtt数据处理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110381023A (zh) | 2019-10-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20240073172A1 (en) | Encoding data in email headers | |
CN111787066A (zh) | 一种基于大数据、ai的物联网数据平台 | |
CN111106996B (zh) | 一种基于WebSocket和缓存的多终端在线聊天系统 | |
CN102655481B (zh) | 一种基于网页的即时通信聊天内容查看方法及系统 | |
CN110381023B (zh) | 一种基于mqtt协议的消息存储方法 | |
US20040172472A1 (en) | System and method for providing status information from multiple information sources in a single display | |
US20070180035A1 (en) | E-mail attachment selectable download | |
US9442925B2 (en) | Regulated texting solution for mobile devices | |
CN108933805A (zh) | 一种文件传输方法及系统 | |
CN108769099A (zh) | 一种消息中间件的消息去重的实现方法 | |
CN101754107A (zh) | 一种在移动通讯终端实时发布和共享文件的方法和系统 | |
CN103259683A (zh) | 基于HTML5的Web网管系统二级缓存推送方法 | |
US11520643B2 (en) | Clipboard object sharing for instant messaging | |
US8489694B2 (en) | Peer-to-peer collaboration of publishers in a publish-subscription environment | |
CN102323933A (zh) | 一种面向即时通信的信息嵌入和交互系统及方法 | |
Bhimani et al. | Message delivery guarantee and status update of clients based on IOT-AMQP | |
CN111817984B (zh) | 消息发送方法、装置、设备及存储介质 | |
US20130044583A1 (en) | Method, System and Program Product for Processing Requests | |
US9185181B2 (en) | Shared cache for potentially repetitive message data in a publish-subscription environment | |
CN114629866A (zh) | 一种多个系统之间随机在线客服建立实时通讯的方法 | |
CN103326927B (zh) | 一种代收邮件的方法和装置 | |
US8224771B2 (en) | Resource sharing for document production | |
CN109688052B (zh) | 邮件信息与即时消息交互方法 | |
CN105207884A (zh) | 一种获取电子邮件投递状态的方法和装置 | |
CN109218162A (zh) | 邮件投递方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |