CN110381023B - 一种基于mqtt协议的消息存储方法 - Google Patents

一种基于mqtt协议的消息存储方法 Download PDF

Info

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
Application number
CN201910514707.7A
Other languages
English (en)
Other versions
CN110381023A (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.)
Inspur Software Co Ltd
Original Assignee
Inspur Software 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 Inspur Software Co Ltd filed Critical Inspur Software Co Ltd
Priority to CN201910514707.7A priority Critical patent/CN110381023B/zh
Publication of CN110381023A publication Critical patent/CN110381023A/zh
Application granted granted Critical
Publication of CN110381023B publication Critical patent/CN110381023B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/12Protocols specially adapted for proprietary or special-purpose networking environments, e.g. medical networks, sensor networks, networks in vehicles or remote metering networks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/06Notations for structuring of protocol data, e.g. abstract syntax notation one [ASN.1]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/26Special 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 协议是物联网协议的一种,是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议。
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时,先读取消息长度,再读取固定长度的消息内容,直到负载读取完毕。
CN201910514707.7A 2019-06-14 2019-06-14 一种基于mqtt协议的消息存储方法 Active CN110381023B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (4)

* Cited by examiner, † Cited by third party
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