CN109862063A - 基于mqtt的发布订阅匹配方法、装置及存储介质 - Google Patents
基于mqtt的发布订阅匹配方法、装置及存储介质 Download PDFInfo
- Publication number
- CN109862063A CN109862063A CN201811340674.0A CN201811340674A CN109862063A CN 109862063 A CN109862063 A CN 109862063A CN 201811340674 A CN201811340674 A CN 201811340674A CN 109862063 A CN109862063 A CN 109862063A
- Authority
- CN
- China
- Prior art keywords
- subscription
- node
- client
- token
- 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
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明涉及人工智能技术,揭露了一种基于MQTT的发布订阅匹配方法、电子装置及存储介质,该方法实时接收所有订阅客户端发送的订阅请求,并利用预设方式创建订阅主题与客户端之间的哈希映射关系。之后,该方法根据订阅请求中的订阅主题,以树形结构配置发布订阅系统提供的根节点及各级令牌节点,在根节点及各级令牌节点分别配置对应的子节点集合及客户端集合,将所述创建的哈希映射关系存储至客户端集合。最后,接收发布客户端发布的消息及发布主题,并利用预设的匹配规则对各级令牌节点进行匹配,若匹配成功,则将发布的消息通过哈希映射关系发布给对应的订阅客户端。利用本发明,能够缩短消息的匹配时间,提高消息的发布订阅效率。
Description
技术领域
本发明涉及人工智能技术领域,尤其涉及一种基于MQTT的发布订阅匹配方法、装置及计算机可读存储介质。
背景技术
国际商业机器公司(International Business Machiness Corporation,IBM)开发的消息队列遥测传输(Message Queuing Telemetry Transport,MQTT)协议已成为物联网消息标准传输协议,该协议规定传输的消息属于一个具体的主题(topic)。在传输的过程中,各个应用系统可以将其自身的一些信息以消息形式发布出去,而对某主题感兴趣的其它应用系统可以根据主题匹配相应的发布消息进行订阅。
由于主题的类型非常多,在匹配的过程中需要花费大量的时间成本,并且在匹配时可能会出现较难解析的主题,如A/B/C/D/E或者A/#及A/+/B等,从而导致系统在发布订阅过程中主题匹配效率过低,成本增加。因此,亟待设计一种合理解析mqtt协议主题的匹配算法。
发明内容
鉴于以上内容,本发明提供一种基于MQTT的发布订阅匹配方法、装置及计算机可读存储介质,其主要目的在于缩短主题匹配时间,提高发布订阅系统的主题匹配效率。
为实现上述目的,本发明提供一种基于MQTT的发布订阅匹配方法,该方法包括:
第一接收步骤:实时接收所有订阅客户端发送的订阅请求,订阅请求包括:客户端标识符、订阅主题及主题标识符;
创建步骤:根据接收到的订阅请求,利用预设方式创建订阅主题与订阅客户端之间的哈希映射关系;
配置步骤:根据订阅请求中的订阅主题,以树形结构配置发布订阅系统提供的根节点及各级令牌节点,在根节点及各级令牌节点分别配置对应的子节点集合及客户端集合,将所述创建的哈希映射关系存储至客户端集合;
第二接收步骤:接收发布客户端发布的消息及发布主题;
匹配步骤:根据接收到的发布主题,利用预设的匹配规则对树形结构下的各级令牌节点进行匹配,若匹配成功,则获取匹配成功的令牌节点中存储的所有哈希映射关系,将发布的消息通过哈希映射关系发布给对应的订阅客户端。
优选地,所述配置步骤包括:
根据订阅请求中的订阅主题,将订阅主题拆分成预设数量不同级别的子主题;
将不同级别的子主题逐级配置至不同层级的令牌节点,在每个层级的令牌节点存储该级别子主题的主题标识符;
在已配置的各层级令牌节点分别存储下一层级的令牌节点及所述订阅主题与订阅客户端之间的映射关系得到子节点集合及客户端集合。
优选地,所述配置步骤还包括:
在将不同级别的子主题逐级配置至不同层级的令牌节点之前,判断某层级的已配置令牌节点中是否存在与该级别子主题相同的令牌节点,若存在,则将所述订阅主题与订阅客户端的映射关系存储至所述已配置令牌节点的客户端集合,继续判断该令牌节点的下一层级的已配置令牌节点中是否存在与下一级别子主题相同的令牌节点;
若不存在,则判断该层级是否存在未配置的令牌节点,若存在,则将该级别的子主题配置至所述未配置的令牌节点,若不存在,则新建一个该层级的令牌节点,将该级别的子主题配置至所述新建的令牌节点。
优选地,所述预设的匹配规则包括:
根据接收到的发布主题,将所述发布主题拆分成预设数量不同级别的子主题;
由高至低依次根据不同级别的子主题,判断各个层级的令牌节点是否存在对应的子主题,若不存在,则匹配失败,返回匹配失败提示信息,若存在,则将该层级的令牌节点与该级别的子主题进行匹配,继续判断下一层级的令牌节点是否存在发布主题对应的下一级别子主题直至将所有子主题匹配完成,输出匹配成功提示信息。
优选地,所述预设方式包括:
创建预设形式的映射表,将客户端标识符、订阅主题、主题标识符存储至该映射表;及
根据所述映射表中存储的信息利用哈希算法生成订阅主题与订阅客户端之间的映射关系。
优选地,该方法还包括:
接收订阅客户端的修改指令,包括:订阅取消指令、订阅新增指令,根据所述修改指令对各层级令牌节点的客户端集合进行相应修改。
此外,本发明还提供一种电子装置,该电子装置包括:存储器、处理器及显示器,所述存储器上存储发布订阅匹配程序,所述发布订阅匹配程序被所述处理器执行,可实现如下步骤:
第一接收步骤:实时接收所有订阅客户端发送的订阅请求,订阅请求包括:客户端标识符、订阅主题及主题标识符;
创建步骤:根据接收到的订阅请求,利用预设方式创建订阅主题与订阅客户端之间的哈希映射关系;
配置步骤:根据订阅请求中的订阅主题,以树形结构配置发布订阅系统提供的根节点及各级令牌节点,在根节点及各级令牌节点分别配置对应的子节点集合及客户端集合,将所述创建的哈希映射关系存储至客户端集合;
第二接收步骤:接收发布客户端发布的消息及发布主题;
匹配步骤:根据接收到的发布主题,利用预设的匹配规则对树形结构下的各级令牌节点进行匹配,若匹配成功,则获取匹配成功的令牌节点中存储的所有哈希映射关系,将发布的消息通过哈希映射关系发布给对应的订阅客户端。
优选地,所述配置步骤包括:
根据订阅请求中的订阅主题,将订阅主题拆分成预设数量不同级别的子主题;
将不同级别的子主题逐级配置至不同层级的令牌节点,在每个层级的令牌节点存储该级别子主题的主题标识符;
在已配置的各层级令牌节点分别存储下一层级的令牌节点及所述订阅主题与订阅客户端之间的映射关系得到子节点集合及客户端集合。
优选地,所述配置步骤还包括:
在将不同级别的子主题逐级配置至不同层级的令牌节点之前,判断某层级的已配置令牌节点中是否存在与该级别子主题相同的令牌节点,若存在,则将所述订阅主题与订阅客户端的映射关系存储至所述已配置令牌节点的客户端集合,继续判断该令牌节点的下一层级的已配置令牌节点中是否存在与下一级别子主题相同的令牌节点;
若不存在,则判断该层级是否存在未配置的令牌节点,若存在,则将该级别的子主题配置至所述未配置的令牌节点,若不存在,则新建一个该层级的令牌节点,将该级别的子主题配置至所述新建的令牌节点。
此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中包括发布订阅匹配程序,所述发布订阅匹配程序被处理器执行时,可实现如上所述基于MQTT的发布订阅匹配方法中的任意步骤。
本发明提出的基于MQTT的发布订阅匹配方法、装置及计算机可读存储介质,通过接收所有订阅客户端发送的订阅请求,并根据订阅请求创建订阅主题与客户端之间的哈希映射关系,之后,以树形结构为系统提供的各级令牌节点配置不同级别的子主题,并为个层级的令牌节点配置对应的子节点集合及客户端集合,将所述常见的哈希映射关系存储至客户端集合,最后,接收发布客户端发布的消息及发布主题,利用预设的匹配规则进行匹配,若匹配成功,则获取匹配成功的令牌节点中存储的所有哈希映射关系,将消息通过哈希映射发布给对应的订阅客户端,从而提高发布订阅系统的吞吐量,提高发布订阅系统的运行效率。
附图说明
图1为本发明基于MQTT的发布订阅匹配方法的应用环境示意图;
图2为本发明电子装置较佳实施例的示意图;
图3为图2中发布订阅匹配程序较佳实施例的模块示意图;
图4为本发明基于MQTT的发布订阅匹配方法较佳实施例的流程图;
图5为本发明发布订阅系统中树形结构的令牌节点示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
如图1所示,是本发明基于MQTT的发布订阅匹配方法的应用环境示意图。
本发明提供一种基于MQTT的发布订阅系统,该系统采用基于主题的方式发布订阅消息,该系统主要包括:发布订阅匹配中心,即电子装置1及多个发布订阅客户端(包括订阅客户端2及发布客户端3)。其中,订阅客户端2用于订阅某感兴趣主题的消息,所述发布客户端3用于发布不同主题的消息。同一个客户端可以是订阅客户端2,也可以是发布客户端3。假设,客户端A对主题为a1的消息感兴趣,则订阅了主题为a1的消息的客户端A为订阅客户端2,但对于主题为a2的消息而言,发布主题为a2的消息的客户端A为发布客户端3。该发布订阅系统接收订阅客户端2需要订阅的主题,并以树形结构配置接收到的订阅主题及订阅客户端2的相关信息,如图5所示,为发布订阅系统中树形结构的令牌节点示意图。该树形结构分成不同层级的令牌(token)节点,如一级token节点、二级token节点、三级token节点等。在每一层级token节点设置该层级token节点对应的所有下一层级token节点,并为每一层级token节点配置拆分后对应级别的子主题,在每一层级token节点存储对应的所有下一层级token节点的信息得到子节点集合,及根据子主题在每一层级token节点存储对应的所有主题与订阅客户端2的哈希映射关系得到客户端集合,最后,根据发布客户端3发布的消息及主题匹配对应的token节点,根据token节点中客户端集合的所有哈希映射关系,将所述发布的消息推送给所有对该主题感兴趣的订阅客户端2。
如图2所示,是本发明电子装置1较佳实施例的示意图。
在本实施例中,该电子装置1可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器等计算设备,该电子装置1可以是独立的服务器,也可以是多个服务器所组成的服务器集群。
该电子装置1包括但不限于:存储器11、处理器12、显示器13及网络接口14。所述电子装置1通过网络接口14连接网络,获取原始数据。其中,所述网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(Global System of Mobilecommunication,GSM)、宽带码分多址(Wideband Code Division Multiple Access,WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi、通话网络等无线或有线网络。
所述存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器11可以是所述电子装置1的内部存储单元,例如该电子装置1的硬盘或内存。在另一些实施例中,所述存储器11也可以是所述电子装置1的外部存储设备,例如该电子装置1配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器11还可以既包括所述电子装置1的内部存储单元也包括其外部存储设备。本实施例中,所述存储器11通常用于存储安装于所述电子装置1的操作系统和各类应用软件,例如发布订阅匹配程序10的程序代码等。此外,所述存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。例如,存储订阅主题与订阅客户端之间的哈希映射关系。
所述处理器12在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器12通常用于控制所述电子装置1的总体操作,例如执行数据交互或者通信相关的控制和处理等。本实施例中,所述处理器12用于运行所述存储器11中存储的程序代码或者处理数据,例如运行发布订阅匹配程序10的程序代码等。
所述显示器13可以称为显示屏或显示单元。在一些实施例中显示器13可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-EmittingDiode,OLED)触摸器等。显示器13用于显示在电子装置1中处理的信息以及用于显示可视化的工作界面,例如,显示匹配成功或失败的提示信息。
网络接口14可选地可以包括标准的有线接口、无线接口(如WI-FI接口),该网络接口14通常用于在所述电子装置1与其他电子设备之间建立通信连接。
图1仅示出了具有组件11-14以及发布订阅匹配程序10的电子装置1,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
可选地,该电子装置1还可以包括用户接口,用户接口可以包括输入单元比如键盘(Keyboard)、语音输出装置比如音响、耳机等,可选地用户接口还可以包括标准的有线接口、无线接口。
可选地,该电子装置1还包括触摸传感器。所述触摸传感器所提供的供用户进行触摸操作的区域称为触控区域。此外,这里所述的触摸传感器可以为电阻式触摸传感器、电容式触摸传感器等。而且,所述触摸传感器不仅包括接触式的触摸传感器,也可包括接近式的触摸传感器等。此外,所述触摸传感器可以为单个传感器,也可以为例如阵列布置的多个传感器。用户可以通过触摸所述触控区域启动发布订阅匹配程序10。
此外,该电子装置1的显示器13的面积可以与所述触摸传感器的面积相同,也可以不同。可选地,将显示器13与所述触摸传感器层叠设置,以形成触摸显示屏。该电子装置1基于触摸显示屏侦测用户触发的触控操作。
该电子装置1还可以包括射频(Radio Frequency,RF)电路、传感器和音频电路等等,在此不再赘述。
如图2所示,是图1中发布订阅匹配程序10较佳实施例的模块示意图。本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段。
在本实施例中,发布订阅匹配程序10包括:第一接收模块110、创建模块120、配置模块130、第二接收模块140及匹配模块150,所述模块110-150所实现的功能或操作步骤如下:
第一接收模块110,用于实时接收所有订阅客户端发送的订阅请求。所述订阅请求包括:客户端标识符、订阅主题及主题标识符。所述客户端标识符即为客户端id(clientid)且全局唯一。所述订阅主题,即主题名称,是指订阅客户端感兴趣的消息的关键字。但应理解的是,所述订阅主题不仅限于某个关键字,还可以包括多个不同级别的子主题,例如,订阅主题为a/b/c,其中,a为一级子主题,b为二级子主题,c为三级子主题。所述订阅主题包括但不限于拆分成三个级别的子主题。所述主题标识符,即topic id,用于在MQTT协议中替换主题名称,如在发布消息时,直接使用被指定主题标识符匹配相应主题。进一步地,所述订阅请求还可以包括:消息质量服务等级(Quality of Service,QoS)。
创建模块120,用于根据接收到的订阅请求,利用预设方式创建订阅主题与订阅客户端之间的哈希映射关系。所述预设方式包括:创建预设形式的映射表,将客户端标识符、订阅主题、主题标识符存储至该映射表,并根据所述映射表中存储的信息利用哈希算法生成订阅主题与订阅客户端之间的哈希映射关系。所述哈希算法,即hash算法,是一种散列算法,通过该hash算法将表中的数据信息转化成固定的长度输出形成哈希映射关系。
配置模块130,用于根据订阅请求中的订阅主题,以树形结构配置发布订阅系统提供的根节点及各级令牌节点,在根节点及各级令牌节点分别配置对应的子节点集合及客户端集合,将所述创建的哈希映射关系存储至客户端集合。具体的,根据订阅请求中的订阅主题,将订阅主题拆分成预设数量不同级别的子主题,接着,将不同级别的子主题逐级配置至不同层级的令牌节点,在每个层级的令牌节点存储该级别子主题的主题标识符,最后,在已配置的各层级令牌节点分别存储下一层级的令牌节点及所述订阅主题与订阅客户端之间的映射关系得到子节点集合及客户端集合。在本实施例中,将订阅主题拆分为三个级别的子主题,包括:一级子主题、二级子主题及三级子主题,但应理解的是,本发明不仅限于将订阅主题拆分为三个级别的子主题,还可以拆分成多个级别的子主题。假设,订阅请求中的订阅主题为a1/b2/c3,将订阅主题拆分得到一级子主题为a1、二级子主题为b2及三级子主题为c3,对应于发布订阅系统提供的根节点及各级令牌节点,如图5所示,根节点的子节点集合存储了所有的一级令牌节点,将一级子主题a1配置至一级令牌节点,并将二级子主题b2配置至该一级令牌节点下的二级令牌节点,将三级子主题c3配置至二级令牌节点下的三级令牌节点,同时在订阅主题对应的各层级令牌节点的客户端存储该订阅请求对应的哈希映射关系生成各层级令牌节点的客户端集合。以此类推,将所有订阅客户端的订阅主题进行拆分、配置。
进一步地,在将不同级别的子主题逐级配置至不同层级的令牌节点之前,判断某层级的已配置令牌节点中是否存在与该级别子主题相同的令牌节点,若存在,则将所述订阅主题与订阅客户端的映射关系存储至所述已配置令牌节点的客户端集合,继续判断该令牌节点的下一层级的已配置令牌节点中是否存在与下一级别子主题相同的令牌节点,若不存在,则判断该层级是否存在未配置的令牌节点,若存在,则将该级别的子主题配置至所述未配置的令牌节点,若不存在,则新建一个该层级的令牌节点,将该级别的子主题配置至所述新建的令牌节点。例如,订阅主题为a1/b2/c3,判断一级令牌节点中是否存在已经配置了一级子主题a1的令牌节点,假设,没有配置了一级子主题a1的令牌节点且不存在未配置的一级令牌节点,则新建一个一级令牌节点,并将一级子主题配置至该新建的一级令牌节点。
第二接收模块140,用于接收发布客户端发布的消息及发布主题。当发布客户端发布消息时,同时发送该消息的发布主题。例如,topic=“天气”,payload=“深圳今天下了一场好大的雨啊!”,其中topic是指主题,payload是指发送的具体消息。
匹配模块150,用于根据接收到的发布主题,利用预设的匹配规则对树形结构下的各级令牌节点进行匹配,若匹配成功,则获取匹配成功的令牌节点中存储的所有哈希映射关系,将发布的消息通过哈希映射关系发布给对应的订阅客户端。所述预设的匹配规则包括:根据接收到的发布主题,将所述发布主题拆分成预设数量不同级别的子主题,之后,由高至低依次根据不同级别的子主题,判断各个层级的令牌节点是否存在对应的子主题,若不存在,则匹配失败,返回匹配失败提示信息,若存在,则将该层级的令牌节点与该级别的子主题进行匹配,继续判断下一层级的令牌节点是否存在发布主题对应的下一级别子主题直至将所有子主题匹配完成,输出匹配成功提示信息。例如,将接收到的发布主题a2/b3/c1进行拆分,得到一级子主题a2、二级子主题b3及三级子主题c1,由高至低依次判断各个层级的令牌节点是否存在对应的子主题,假设存在配置了一级子主题a2一级令牌节点,则继续判断下一层的令牌节点中是否存在配置了二级子主题b3的二级令牌节点。
在另一个实施例中,还可以包括接收订阅客户端的修改指令,包括:订阅取消指令、订阅新增指令,根据所述修改指令对各层级令牌节点的客户端集合进行相应修改。例如,订阅客户端想将自己订阅的主题取消,可以向发布订阅系统发送订阅取消指令,系统接收到订阅取消指令后在对应的主题的令牌节点的中删除对应的哈希映射关系。
如图3所示,是本发明基于MQTT的发布订阅匹配方法较佳实施例的流程图。
在本实施例中,处理器12执行存储器11中存储的发布订阅匹配程序10的计算机程序时实现基于MQTT的发布订阅匹配方法包括:步骤S10-步骤S50。
步骤S10,第一接收模块110实时接收所有订阅客户端发送的订阅请求。所述订阅请求包括:客户端标识符、订阅主题及主题标识符。所述客户端标识符即为客户端id(client id)且全局唯一。所述订阅主题,即主题名称,是指订阅客户端感兴趣的消息的关键字。但应理解的是,所述订阅主题不仅限于某个关键字,还可以包括多个不同级别的子主题,例如,订阅主题为a/b/c,其中,a为一级子主题,b为二级子主题,c为三级子主题。所述订阅主题包括但不限于拆分成三个级别的子主题。所述主题标识符,即topic id,用于在MQTT协议中替换主题名称,如在发布消息时,直接使用被指定主题标识符匹配相应主题。进一步地,所述订阅请求还可以包括:消息质量服务等级(Quality of Service,QoS)。
步骤S20,创建模块120根据接收到的订阅请求,利用预设方式创建订阅主题与订阅客户端之间的哈希映射关系。所述预设方式包括:创建预设形式的映射表,将客户端标识符、订阅主题、主题标识符存储至该映射表,并根据所述映射表中存储的信息利用哈希算法生成订阅主题与订阅客户端之间的哈希映射关系。所述哈希算法,即hash算法,是一种散列算法,通过该hash算法将表中的数据信息转化成固定的长度输出形成哈希映射关系。
步骤S30,配置模块130根据订阅请求中的订阅主题,以树形结构配置发布订阅系统提供的根节点及各级令牌节点,在根节点及各级令牌节点分别配置对应的子节点集合及客户端集合,将所述创建的哈希映射关系存储至客户端集合。具体的,根据订阅请求中的订阅主题,将订阅主题拆分成预设数量不同级别的子主题,接着,将不同级别的子主题逐级配置至不同层级的令牌节点,在每个层级的令牌节点存储该级别子主题的主题标识符,最后,在已配置的各层级令牌节点分别存储下一层级的令牌节点及所述订阅主题与订阅客户端之间的映射关系得到子节点集合及客户端集合。在本实施例中,将订阅主题拆分为三个级别的子主题,包括:一级子主题、二级子主题及三级子主题,但应理解的是,本发明不仅限于将订阅主题拆分为三个级别的子主题,还可以拆分成多个级别的子主题。假设,订阅请求中的订阅主题为a1/b2/c3,将订阅主题拆分得到一级子主题为a1、二级子主题为b2及三级子主题为c3,对应于发布订阅系统提供的根节点及各级令牌节点,如图5所示,根节点的子节点集合存储了所有的一级令牌节点,将一级子主题a1配置至一级令牌节点,并将二级子主题b2配置至该一级令牌节点下的二级令牌节点,将三级子主题c3配置至二级令牌节点下的三级令牌节点,同时在订阅主题对应的各层级令牌节点的客户端存储该订阅请求对应的哈希映射关系生成各层级令牌节点的客户端集合。以此类推,将所有订阅客户端的订阅主题进行拆分、配置。
进一步地,在将不同级别的子主题逐级配置至不同层级的令牌节点之前,判断某层级的已配置令牌节点中是否存在与该级别子主题相同的令牌节点,若存在,则将所述订阅主题与订阅客户端的映射关系存储至所述已配置令牌节点的客户端集合,继续判断该令牌节点的下一层级的已配置令牌节点中是否存在与下一级别子主题相同的令牌节点,若不存在,则判断该层级是否存在未配置的令牌节点,若存在,则将该级别的子主题配置至所述未配置的令牌节点,若不存在,则新建一个该层级的令牌节点,将该级别的子主题配置至所述新建的令牌节点。例如,订阅主题为a1/b2/c3,判断一级令牌节点中是否存在已经配置了一级子主题a1的令牌节点,假设,没有配置了一级子主题a1的令牌节点且不存在未配置的一级令牌节点,则新建一个一级令牌节点,并将一级子主题配置至该新建的一级令牌节点。
步骤S40,第二接收模块140接收发布客户端发布的消息及发布主题。当发布客户端发布消息时,同时发送该消息的发布主题。例如,topic=“天气”,payload=“深圳今天下了一场好大的雨啊!”,其中topic是指主题,payload是指发送的具体消息。
步骤S50,匹配模块150根据接收到的发布主题,利用预设的匹配规则对树形结构下的各级令牌节点进行匹配,若匹配成功,则获取匹配成功的令牌节点中存储的所有哈希映射关系,将发布的消息通过哈希映射关系发布给对应的订阅客户端。所述预设的匹配规则包括:根据接收到的发布主题,将所述发布主题拆分成预设数量不同级别的子主题,之后,由高至低依次根据不同级别的子主题,判断各个层级的令牌节点是否存在对应的子主题,若不存在,则匹配失败,返回匹配失败提示信息,若存在,则将该层级的令牌节点与该级别的子主题进行匹配,继续判断下一层级的令牌节点是否存在发布主题对应的下一级别子主题直至将所有子主题匹配完成,输出匹配成功提示信息。例如,将接收到的发布主题a2/b3/c1进行拆分,得到一级子主题a2、二级子主题b3及三级子主题c1,由高至低依次判断各个层级的令牌节点是否存在对应的子主题,假设存在配置了一级子主题a2一级令牌节点,则继续判断下一层的令牌节点中是否存在配置了二级子主题b3的二级令牌节点。
在另一个实施例中,还可以包括接收订阅客户端的修改指令,包括:订阅取消指令、订阅新增指令,根据所述修改指令对各层级令牌节点的客户端集合进行相应修改。例如,订阅客户端想将自己订阅的主题取消,可以向发布订阅系统发送订阅取消指令,系统接收到订阅取消指令后在对应的主题的令牌节点的中删除对应的哈希映射关系。
上述实施例提出的基于MQTT的发布订阅匹配方法,通过接收订阅客户端的订阅请求,创建主题与客户端之间的哈希映射关系,并根据请求中的订阅主题以树形结构对哈希映射关系进行分类,之后,接收发布客户端发布的消息及主题,根据发布主题从树形结构中搜索与发布主题一致的所有订阅客户端,并向所述搜索出的所有订阅客户端发送消息,从而提高系统的发布订阅效率,便于订阅消息的快速匹配。
此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质中包括发布订阅匹配程序10,所述发布订阅匹配程序10被处理器执行时实现如下操作:
第一接收步骤:实时接收所有订阅客户端发送的订阅请求,订阅请求包括:客户端标识符、订阅主题及主题标识符;
创建步骤:根据接收到的订阅请求,利用预设方式创建订阅主题与订阅客户端之间的哈希映射关系;
配置步骤:根据订阅请求中的订阅主题,以树形结构配置发布订阅系统提供的根节点及各级令牌节点,在根节点及各级令牌节点分别配置对应的子节点集合及客户端集合,将所述创建的哈希映射关系存储至客户端集合;
第二接收步骤:接收发布客户端发布的消息及发布主题;
匹配步骤:根据接收到的发布主题,利用预设的匹配规则对树形结构下的各级令牌节点进行匹配,若匹配成功,则获取匹配成功的令牌节点中存储的所有哈希映射关系,将发布的消息通过哈希映射关系发布给对应的订阅客户端。
优选地,所述配置步骤包括:
根据订阅请求中的订阅主题,将订阅主题拆分成预设数量不同级别的子主题;
将不同级别的子主题逐级配置至不同层级的令牌节点,在每个层级的令牌节点存储该级别子主题的主题标识符;
在已配置的各层级令牌节点分别存储下一层级的令牌节点及所述订阅主题与订阅客户端之间的映射关系得到子节点集合及客户端集合。
优选地,所述配置步骤还包括:
在将不同级别的子主题逐级配置至不同层级的令牌节点之前,判断某层级的已配置令牌节点中是否存在与该级别子主题相同的令牌节点,若存在,则将所述订阅主题与订阅客户端的映射关系存储至所述已配置令牌节点的客户端集合,继续判断该令牌节点的下一层级的已配置令牌节点中是否存在与下一级别子主题相同的令牌节点;
若不存在,则判断该层级是否存在未配置的令牌节点,若存在,则将该级别的子主题配置至所述未配置的令牌节点,若不存在,则新建一个该层级的令牌节点,将该级别的子主题配置至所述新建的令牌节点。
优选地,所述预设的匹配规则包括:
根据接收到的发布主题,将所述发布主题拆分成预设数量不同级别的子主题;
由高至低依次根据不同级别的子主题,判断各个层级的令牌节点是否存在对应的子主题,若不存在,则匹配失败,返回匹配失败提示信息,若存在,则将该层级的令牌节点与该级别的子主题进行匹配,继续判断下一层级的令牌节点是否存在发布主题对应的下一级别子主题直至将所有子主题匹配完成,输出匹配成功提示信息。
优选地,所述预设方式包括:
创建预设形式的映射表,将客户端标识符、订阅主题、主题标识符存储至该映射表;及
根据所述映射表中存储的信息利用哈希算法生成订阅主题与订阅客户端之间的映射关系。
优选地,该方法还包括:
接收订阅客户端的修改指令,包括:订阅取消指令、订阅新增指令,根据所述修改指令对各层级令牌节点的客户端集合进行相应修改。
本发明之计算机可读存储介质的具体实施方式与上述基于MQTT的发布订阅匹配方法的具体实施方式大致相同,在此不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种基于MQTT的发布订阅匹配方法,应用于电子装置,其特征在于,所述方法包括:
第一接收步骤:实时接收所有订阅客户端发送的订阅请求,订阅请求包括:客户端标识符、订阅主题及主题标识符;
创建步骤:根据接收到的订阅请求,利用预设方式创建订阅主题与订阅客户端之间的哈希映射关系;
配置步骤:根据订阅请求中的订阅主题,以树形结构配置发布订阅系统提供的根节点及各级令牌节点,在根节点及各级令牌节点分别配置对应的子节点集合及客户端集合,将所述创建的哈希映射关系存储至客户端集合;
第二接收步骤:接收发布客户端发布的消息及发布主题;
匹配步骤:根据接收到的发布主题,利用预设的匹配规则对树形结构下的各级令牌节点进行匹配,若匹配成功,则获取匹配成功的令牌节点中存储的所有哈希映射关系,将发布的消息通过哈希映射关系发布给对应的订阅客户端。
2.根据权利要求1所述的基于MQTT的发布订阅匹配方法,其特征在于,所述配置步骤包括:
根据订阅请求中的订阅主题,将订阅主题拆分成预设数量不同级别的子主题;
将不同级别的子主题逐级配置至不同层级的令牌节点,在每个层级的令牌节点存储该级别子主题的主题标识符;
在已配置的各层级令牌节点分别存储下一层级的令牌节点及所述订阅主题与订阅客户端之间的映射关系得到子节点集合及客户端集合。
3.根据权利要求2所述的基于MQTT的发布订阅匹配方法,其特征在于,所述配置步骤还包括:
在将不同级别的子主题逐级配置至不同层级的令牌节点之前,判断某层级的已配置令牌节点中是否存在与该级别子主题相同的令牌节点,若存在,则将所述订阅主题与订阅客户端的映射关系存储至所述已配置令牌节点的客户端集合,继续判断该令牌节点的下一层级的已配置令牌节点中是否存在与下一级别子主题相同的令牌节点;
若不存在,则判断该层级是否存在未配置的令牌节点,若存在,则将该级别的子主题配置至所述未配置的令牌节点,若不存在,则新建一个该层级的令牌节点,将该级别的子主题配置至所述新建的令牌节点。
4.根据权利要求1所述的基于MQTT的发布订阅匹配方法,其特征在于,所述预设的匹配规则包括:
根据接收到的发布主题,将所述发布主题拆分成预设数量不同级别的子主题;
由高至低依次根据不同级别的子主题,判断各个层级的令牌节点是否存在对应的子主题,若不存在,则匹配失败,返回匹配失败提示信息,若存在,则将该层级的令牌节点与该级别的子主题进行匹配,继续判断下一层级的令牌节点是否存在发布主题对应的下一级别子主题直至将所有子主题匹配完成,输出匹配成功提示信息。
5.根据权利要求1所述的基于MQTT的发布订阅匹配方法,其特征在于,所述预设方式包括:
创建预设形式的映射表,将客户端标识符、订阅主题、主题标识符存储至该映射表;及
根据所述映射表中存储的信息利用哈希算法生成订阅主题与订阅客户端之间的映射关系。
6.根据权利要求1所述的基于MQTT的发布订阅匹配方法,其特征在于,该方法还包括:
接收订阅客户端的修改指令,包括:订阅取消指令、订阅新增指令,根据所述修改指令对各层级令牌节点的客户端集合进行相应修改。
7.一种电子装置,其特征在于,所述电子装置包括:存储器、处理器及显示器,所述存储器上存储有发布订阅匹配程序,所述发布订阅匹配程序被所述处理器执行,可实现如下步骤:
第一接收步骤:实时接收所有订阅客户端发送的订阅请求,订阅请求包括:客户端标识符、订阅主题及主题标识符;
创建步骤:根据接收到的订阅请求,利用预设方式创建订阅主题与订阅客户端之间的哈希映射关系;
配置步骤:根据订阅请求中的订阅主题,以树形结构配置发布订阅系统提供的根节点及各级令牌节点,在根节点及各级令牌节点分别配置对应的子节点集合及客户端集合,将所述创建的哈希映射关系存储至客户端集合;
第二接收步骤:接收发布客户端发布的消息及发布主题;
匹配步骤:根据接收到的发布主题,利用预设的匹配规则对树形结构下的各级令牌节点进行匹配,若匹配成功,则获取匹配成功的令牌节点中存储的所有哈希映射关系,将发布的消息通过哈希映射关系发布给对应的订阅客户端。
8.根据权利要求7所述的电子装置,其特征在于,所述配置步骤包括:
根据订阅请求中的订阅主题,将订阅主题拆分成预设数量不同级别的子主题;
将不同级别的子主题逐级配置至不同层级的令牌节点,在每个层级的令牌节点存储该级别子主题的主题标识符;
在已配置的各层级令牌节点分别存储下一层级的令牌节点及所述订阅主题与订阅客户端之间的映射关系得到子节点集合及客户端集合。
9.根据权利要求8所述的电子装置,其特征在于,所述配置步骤还包括:
在将不同级别的子主题逐级配置至不同层级的令牌节点之前,判断某层级的已配置令牌节点中是否存在与该级别子主题相同的令牌节点,若存在,则将所述订阅主题与订阅客户端的映射关系存储至所述已配置令牌节点的客户端集合,继续判断该令牌节点的下一层级的已配置令牌节点中是否存在与下一级别子主题相同的令牌节点;
若不存在,则判断该层级是否存在未配置的令牌节点,若存在,则将该级别的子主题配置至所述未配置的令牌节点,若不存在,则新建一个该层级的令牌节点,将该级别的子主题配置至所述新建的令牌节点。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中包括发布订阅匹配程序,所述发布订阅匹配程序被处理器执行时,可实现如权利要求1至6中任一项所述基于MQTT的发布订阅匹配方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811340674.0A CN109862063A (zh) | 2018-11-12 | 2018-11-12 | 基于mqtt的发布订阅匹配方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811340674.0A CN109862063A (zh) | 2018-11-12 | 2018-11-12 | 基于mqtt的发布订阅匹配方法、装置及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109862063A true CN109862063A (zh) | 2019-06-07 |
Family
ID=66889969
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811340674.0A Pending CN109862063A (zh) | 2018-11-12 | 2018-11-12 | 基于mqtt的发布订阅匹配方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109862063A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110912808A (zh) * | 2019-11-29 | 2020-03-24 | 三一重工股份有限公司 | 消息订阅方法、装置、系统、设备终端和可读存储介质 |
CN111026972A (zh) * | 2019-12-26 | 2020-04-17 | 远景智能国际私人投资有限公司 | 物联网中的订阅数据推送方法、装置、设备及存储介质 |
CN111669315A (zh) * | 2020-06-04 | 2020-09-15 | 拉扎斯网络科技(上海)有限公司 | 消息推送方法、装置、系统、电子设备及可读存储介质 |
CN112383629A (zh) * | 2020-11-16 | 2021-02-19 | 四川长虹电器股份有限公司 | 一种高效可迁移的MQTT Broker订阅树实现方法 |
CN112463413A (zh) * | 2020-12-11 | 2021-03-09 | 交控科技股份有限公司 | 一种车站终端数据交互的方法及系统 |
CN112800030A (zh) * | 2021-02-08 | 2021-05-14 | 中国银联股份有限公司 | 一种流程的组件数据管理方法、装置及计算机可读存储介质 |
CN113239307A (zh) * | 2021-05-17 | 2021-08-10 | 北京百度网讯科技有限公司 | 用于存储消息主题的方法及装置 |
CN113783838A (zh) * | 2021-08-05 | 2021-12-10 | 山东有人物联网股份有限公司 | 一种订阅方法、订阅控制装置及计算机可读存储介质 |
CN115550439A (zh) * | 2022-11-29 | 2022-12-30 | 杭州涂鸦信息技术有限公司 | 事件管理系统及方法 |
CN117194080A (zh) * | 2023-11-08 | 2023-12-08 | 恒生电子股份有限公司 | 消息处理方法及装置 |
CN117793187A (zh) * | 2023-12-27 | 2024-03-29 | 镁佳(武汉)科技有限公司 | 一种mqtt通信代理的进程间通信方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101170557A (zh) * | 2006-10-27 | 2008-04-30 | 国际商业机器公司 | 发布/订阅中的访问控制的装置和方法 |
CN101193077A (zh) * | 2006-11-30 | 2008-06-04 | 国际商业机器公司 | 用于订阅匹配的方法和系统 |
CN102859541A (zh) * | 2010-04-19 | 2013-01-02 | 国际商业机器公司 | 在发布/订阅通讯中控制消息传递 |
CN106130882A (zh) * | 2016-07-13 | 2016-11-16 | 北京百度网讯科技有限公司 | 用于传输消息的方法和装置 |
CN107679931A (zh) * | 2017-08-17 | 2018-02-09 | 平安科技(深圳)有限公司 | 订单异步处理的方法、装置、存储介质及终端 |
CN107809489A (zh) * | 2017-11-17 | 2018-03-16 | 南京感度信息技术有限责任公司 | 一种基于mqtt协议的消息推送系统 |
-
2018
- 2018-11-12 CN CN201811340674.0A patent/CN109862063A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101170557A (zh) * | 2006-10-27 | 2008-04-30 | 国际商业机器公司 | 发布/订阅中的访问控制的装置和方法 |
CN101193077A (zh) * | 2006-11-30 | 2008-06-04 | 国际商业机器公司 | 用于订阅匹配的方法和系统 |
CN102859541A (zh) * | 2010-04-19 | 2013-01-02 | 国际商业机器公司 | 在发布/订阅通讯中控制消息传递 |
CN106130882A (zh) * | 2016-07-13 | 2016-11-16 | 北京百度网讯科技有限公司 | 用于传输消息的方法和装置 |
CN107679931A (zh) * | 2017-08-17 | 2018-02-09 | 平安科技(深圳)有限公司 | 订单异步处理的方法、装置、存储介质及终端 |
CN107809489A (zh) * | 2017-11-17 | 2018-03-16 | 南京感度信息技术有限责任公司 | 一种基于mqtt协议的消息推送系统 |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110912808A (zh) * | 2019-11-29 | 2020-03-24 | 三一重工股份有限公司 | 消息订阅方法、装置、系统、设备终端和可读存储介质 |
CN111026972A (zh) * | 2019-12-26 | 2020-04-17 | 远景智能国际私人投资有限公司 | 物联网中的订阅数据推送方法、装置、设备及存储介质 |
CN111669315A (zh) * | 2020-06-04 | 2020-09-15 | 拉扎斯网络科技(上海)有限公司 | 消息推送方法、装置、系统、电子设备及可读存储介质 |
CN112383629B (zh) * | 2020-11-16 | 2022-02-01 | 四川长虹电器股份有限公司 | 一种高效可迁移的MQTT Broker订阅树实现方法 |
CN112383629A (zh) * | 2020-11-16 | 2021-02-19 | 四川长虹电器股份有限公司 | 一种高效可迁移的MQTT Broker订阅树实现方法 |
CN112463413A (zh) * | 2020-12-11 | 2021-03-09 | 交控科技股份有限公司 | 一种车站终端数据交互的方法及系统 |
CN112800030A (zh) * | 2021-02-08 | 2021-05-14 | 中国银联股份有限公司 | 一种流程的组件数据管理方法、装置及计算机可读存储介质 |
CN112800030B (zh) * | 2021-02-08 | 2024-03-29 | 中国银联股份有限公司 | 一种流程的组件数据管理方法、装置及计算机可读存储介质 |
CN113239307A (zh) * | 2021-05-17 | 2021-08-10 | 北京百度网讯科技有限公司 | 用于存储消息主题的方法及装置 |
CN113783838B (zh) * | 2021-08-05 | 2024-02-06 | 山东有人物联网股份有限公司 | 一种订阅方法、订阅控制装置及计算机可读存储介质 |
CN113783838A (zh) * | 2021-08-05 | 2021-12-10 | 山东有人物联网股份有限公司 | 一种订阅方法、订阅控制装置及计算机可读存储介质 |
CN115550439A (zh) * | 2022-11-29 | 2022-12-30 | 杭州涂鸦信息技术有限公司 | 事件管理系统及方法 |
CN117194080A (zh) * | 2023-11-08 | 2023-12-08 | 恒生电子股份有限公司 | 消息处理方法及装置 |
CN117194080B (zh) * | 2023-11-08 | 2024-02-06 | 恒生电子股份有限公司 | 消息处理方法及装置 |
CN117793187A (zh) * | 2023-12-27 | 2024-03-29 | 镁佳(武汉)科技有限公司 | 一种mqtt通信代理的进程间通信方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109862063A (zh) | 基于mqtt的发布订阅匹配方法、装置及存储介质 | |
US12112144B2 (en) | API specification generation | |
US10212563B2 (en) | Updating web resources | |
US6832366B2 (en) | Application generator | |
CN108989397B (zh) | 数据推荐方法、装置及存储介质 | |
CN112073471A (zh) | 设备的控制方法和装置、存储介质及电子装置 | |
CN102694804A (zh) | 基于UPnP协议的智能家居统一平台的实现方法及装置 | |
CN103905293A (zh) | 一种获取表情信息的方法及装置 | |
CN108008944A (zh) | 规则引擎响应方法及系统、规则引擎、服务终端、存储器 | |
CN109905293A (zh) | 一种终端设备识别方法、系统及存储介质 | |
CN107291744A (zh) | 确定及运用应用程序之间的关系关联的方法及装置 | |
CN106357521A (zh) | 数据分享方法及装置 | |
CN109981745A (zh) | 一种日志文件处理方法及服务器 | |
CN110659261A (zh) | 一种数据挖掘模型发布方法及模型和模型服务管理方法 | |
CN112422450A (zh) | 计算机设备、服务请求的流量控制方法及装置 | |
CN110249642A (zh) | 操作实例资源的方法和装置 | |
CN113077201A (zh) | 一种解析业务参数的方法、装置和系统 | |
CN104243565A (zh) | 获取配置数据的方法和装置 | |
CN104572661B (zh) | 终端设备以及信息处理方法 | |
CN110334063B (zh) | 文件系统的操作方法、装置、设备及计算机可读存储介质 | |
CN103186405A (zh) | 一种实现设备的统一控制方法和装置 | |
CN111475468A (zh) | 新增系统的日志接入方法、装置、设备及存储介质 | |
CN116776030A (zh) | 灰度发布方法、装置、计算机设备、存储介质 | |
CN102707967A (zh) | 一种运行第三方应用程序的方法、设备及系统 | |
CN114385672A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190607 |
|
RJ01 | Rejection of invention patent application after publication |