一种基于MQTT服务的客户端与主题隔离方法及系统与流程

未命名 09-12 阅读:142 评论:0

一种基于mqtt服务的客户端与主题隔离方法及系统
技术领域
1.本技术涉及消息发布/订阅传输协议技术领域,尤其涉及一种基于mqtt服务的客户端与主题隔离方法及系统。


背景技术:

2.mqtt(消息队列遥测传输)是iso标准(iso/iec prf 20922)下基于发布/订阅范式的消息协议,用以实现设备之间的通讯。它工作在tcp/ip协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。mqtt协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(m2m)通信和物联网(iot)。其在通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居及一些小型化设备中已广泛使用。
3.在部署一套mqtt服务时,不同的项目或者相同的项目在使用相同的mqtt服务的过程中,可能存在项目发布与订阅主题相同的现象,或存在匹配所有主题的现象,该情况会导致项目之间数据不隔离与脏数据的产生。如果采用一个项目部署一套mqtt服务的方式,会产生新的问题,例如增加服务器硬件的采购成本,与增加mqtt服务维护的成本。基于以上情况,本技术要从技术上解决在部署一套mqtt服务时,实现项目之间数据逻辑软隔离,项目绑定的mqtt服务统一的维护问题,避免一个项目搭建一套mqtt服务的解决方案。


技术实现要素:

4.本技术提供了一种基于mqtt服务的客户端与主题隔离方法,以解决在部署一套mqtt服务时,不同的项目或者相同的项目在使用相同的mqtt服务的过程中,可能导致项目之间数据不隔离与脏数据的产生的问题。
5.一方面,本技术提供一种基于mqtt服务的客户端与主题隔离方法,包括:
6.配置数个mqtt客户端,每个mqtt客户端对应设置有一个独立的mqtt通讯服务;
7.基于每个独立的mqtt通讯服务生成一个独立的mqtt服务线程;
8.标记每个mqtt服务线程,建立至少一个mqtt客户端和与其对应的mqtt服务线程之间的通讯;
9.对mqtt服务线程中的订阅/发布主题进行前置量的标记;
10.将标记后的订阅/发布主题打包为订阅/发布主题模块;
11.将订阅/发布主题模块加载到共享内存主题存储管理模块中;
12.标记mqtt服务线程对应的mqtt客户端的id;
13.将mqtt客户端id加载到共享内存mqtt客户端信息管理模块中。
14.可选的,所述标记每个mqtt服务线程的步骤包括:
15.采用通讯服务ip与端口相结合的方式标记当前mqtt服务线程,所述mqtt服务线程支持独立的启动、停止、订阅/发布服务。
16.可选的,所述对mqtt服务线程中的订阅/发布主题进行前置量的标记的步骤包括:
17.选择不同的前置标记对应不同的mqtt通讯服务线程的订阅/发布主题,所述线程主题的前置标记按照一定规则组合而成。
18.可选的,所述标记mqtt服务线程对应的mqtt客户端的id的步骤包括:
19.按照线程主题的前置标记规则标记独立的mqtt服务线程对应的客户端id,标记后的客户端id用于明确mqtt客户端与mqtt服务线程的所属关系。
20.另一方面,本技术提供一种基于mqtt服务的客户端与主题隔离系统,包括mqtt客户端模块、端口标记线程管理模块、主题标记模块、订阅/发布主题模块、共享内存主题存储管理模块、客户端id标记模块和共享内存mqtt客户端信息管理模块,其中:
21.所述mqtt客户端模块包括数个mqtt客户端和对应的独立的mqtt服务线程;
22.所述端口标记线程管理模块被配置为标记mqtt服务线程;
23.所述主题标记模块被配置为对mqtt服务线程中的订阅/发布主题进行前置量的标记;
24.所述订阅/发布主题模块被配置为打包标记后的订阅/发布主题;
25.所述共享内存主题存储管理模块被配置为存储和管理订阅/发布主题模块;
26.所述客户端id标记模块被配置为标记mqtt服务线程对应的mqtt客户端的id;
27.所述共享内存mqtt客户端信息管理模块被配置为存储和管理mqtt客户端id。
28.由以上技术方案可知,本技术提供一种基于mqtt服务的客户端与主题隔离方法及系统,所述方法包括:配置数个mqtt客户端,每个mqtt客户端对应设置有一个独立的mqtt通讯服务;基于每个独立的mqtt通讯服务生成一个独立的mqtt服务线程;标记每个mqtt服务线程,建立至少一个mqtt客户端和与其对应的mqtt服务线程之间的通讯;对mqtt服务线程中的订阅/发布主题进行前置量的标记;将标记后的订阅/发布主题打包为订阅/发布主题模块;将订阅/发布主题模块加载到共享内存主题存储管理模块中;标记mqtt服务线程对应的mqtt客户端的id;将mqtt客户端id加载到共享内存mqtt客户端信息管理模块中。
29.本技术最大限度的利用了硬件资源,一台硬件服务器上可以运行多个独立的mqtt服务,减少了服务器硬件的采购成本;本技术还采用项目与特定mqtt服务绑定的方式,实现了项目mqtt服务的统一维护,降低了项目的运维成本。
附图说明
30.为了更清楚地说明本技术的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
31.图1为本技术提供的一种基于mqtt服务的客户端与主题隔离方法的流程示意图。
具体实施方式
32.下面将详细地对实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下实施例中描述的实施方式并不代表与本技术相一致的所有实施方式。仅是与权利要求书中所详述的、本技术的一些方面相一致的系统和方法的示例。
33.现有的基于mqtt协议实现mqtt服务平台与主题隔离的技术方案,主要有以下两种
方法:
34.第一种是平台化技术解决方案,该解决方案主要采用了docker技术,将mqtt通讯服务镜像与mq服务镜像存储到特定的服务器上。采用动态化的解决方案,需要服务时,动态拉取镜像部署mqtt服务与mq消息服务,并将mqtt服务与mq消息服务进行动态绑定。该方案可以部署到同一台服务器上,或者不同的服务器上。该方案实现了mqtt服务统一的运维服务,但该方案技术壁垒较高。
35.第二种是单机部署技术解决方案,该方案将mqtt服务程序部署到单独的服务器上,用于mqtt服务通讯,或者将mqtt服务做成镜像文件在独立的服务器上部署多套,实现单一服务器上多个docker mqtt服务的部署,该方式同样实现了mqtt服务主题的隔离。该方案若采用docker部署多个服务,则运维管理复杂,在实际项目中很少使用。若采用一台服务器上,部署一套mqtt服务,则很难满足多个项目的同时使用,若多个项目同时使用一套mqtt服务,项目很容易接收到脏数据。
36.基于上述原因,本技术提供一种基于mqtt服务的客户端与主题隔离方法,参见图1,包括:
37.配置数个mqtt客户端,每个mqtt客户端对应设置有一个独立的mqtt通讯服务;
38.在一种实施例中,数个mqtt客户端及其对应的独立mqtt通讯服务的设置使得本技术可以满足同时使用多个项目的服务需求,现有的通讯协议往往十分复杂且庞大,因此同时调用多个项目已经成为了普遍需求。
39.基于每个独立的mqtt通讯服务生成一个独立的mqtt服务线程;
40.在一种实施例中,基于每个独立的mqtt通讯服务生成一个独立的mqtt服务线程解决了现有技术中在部署一套mqtt服务时,不同的项目或者相同的项目在使用相同的mqtt服务的过程中,可能存在项目发布与订阅主题相同的现象,或存在匹配所有主题的现象。
41.在一种实施例中,所述独立的mqtt服务线程使得通讯数据相互之间产生隔离,不会出现数据之间互相污染的情况,避免了项目接收到脏数据的情况出现,优化了现有技术。
42.标记每个mqtt服务线程,建立至少一个mqtt客户端和与其对应的mqtt服务线程之间的通讯;
43.在一种实施例中,mqtt服务线程为本技术的维护对象,与现有技术中对一个或者多个mqtt主程序进行维护相比,本技术维护mqtt服务线程使得本技术操作简单,工作量小。
44.对mqtt服务线程中的订阅/发布主题进行前置量的标记;
45.在一种实施例中,本技术通过对mqtt服务线程中的订阅/发布主题进行前置量的标记以区分每个mqtt服务线程,避免mqtt服务线程与mqtt客户端出现通讯错误的情况。
46.将标记后的订阅/发布主题打包为订阅/发布主题模块;
47.将订阅/发布主题模块加载到共享内存主题存储管理模块中;
48.在一种实施例中,所述共享内存主题存储管理模块可以对其中存储的数个标记后的订阅/发布主题进行管理,在其他模块发出调用或通讯的命令时进行相应响应。
49.标记mqtt服务线程对应的mqtt客户端的id;
50.在一种实施例中,本技术通过对mqtt订阅/发布主题标记与mqtt客户端标记实现共享内存隔离方式,该方式对计算机的资源利用率高。
51.将mqtt客户端id加载到共享内存mqtt客户端信息管理模块中。
52.在一种实施例中,所述共享内存mqtt客户端信息管理模块可以对其中存储的数个mqtt客户端id进行管理,在其他模块发出调用或通讯的命令时进行相应响应。
53.进一步的,所述标记每个mqtt服务线程的步骤包括:
54.采用通讯服务ip与端口相结合的方式标记当前mqtt服务线程,所述mqtt服务线程支持独立的启动、停止、订阅/发布服务。
55.在一种实施例中,还可以采用端口标记的方法标记当前线程,或者按照特定的规则标记当前线程,只需满足将mqtt服务线程与mqtt客户端对应起来的条件即可。
56.进一步的,所述对mqtt服务线程中的订阅/发布主题进行前置量的标记的步骤包括:
57.选择不同的前置标记对应不同的mqtt通讯服务线程的订阅/发布主题,所述线程主题的前置标记按照一定规则组合而成。
58.在一种实施例中,订阅/发布主题为“/xxx/xx/...”,标记后的主题变为“/tagxx/xxx/xx/...”,其中“tagxx”表示对不同的mqtt服务线程的订阅/发布主题进行的前置变量标记,不同的mqtt服务线程对应的订阅/发布主题前置标记不同。
59.在一种实施例中,不同mqtt服务线程订阅/发布的前置主题标记可以按照“&”+“线程通讯端口”的方式进行前置标记。订阅/发布主题标记后进入订阅/发布主题模块,最终被加载到共享内存主题存储管理模块中。
60.进一步的,所述标记mqtt服务线程对应的mqtt客户端的id的步骤包括:
61.按照线程主题的前置标记规则标记独立的mqtt服务线程对应的客户端id,标记后的客户端id用于明确mqtt客户端与mqtt服务线程的所属关系。
62.在一种实施例中,端口标记线程管理模块中的mqtt服务线程中的原始mqtt客户端id为“xxx”,标记后为“tagport—xxx”。“tagport—”表示为客户端标记变量。
63.在一种实施例中,mqtt服务线程标中的mqtt客户端id标记,可以按照“端口号”+“—”的方式,用于标记mqtt客户端属于那个mqtt服务线程,不同的“端口号”表示mqtt服务线程对外提供的服务端口号。
64.另一方面,本技术提供一种基于mqtt服务的客户端与主题隔离系统,包括mqtt客户端模块、端口标记线程管理模块、主题标记模块、订阅/发布主题模块、共享内存主题存储管理模块、客户端id标记模块和共享内存mqtt客户端信息管理模块,其中:
65.所述mqtt客户端模块包括数个mqtt客户端和对应的独立的mqtt服务线程;
66.所述端口标记线程管理模块被配置为标记mqtt服务线程;
67.所述主题标记模块被配置为对mqtt服务线程中的订阅/发布主题进行前置量的标记;
68.所述订阅/发布主题模块被配置为打包标记后的订阅/发布主题;
69.所述共享内存主题存储管理模块被配置为存储和管理订阅/发布主题模块;
70.所述客户端id标记模块被配置为标记mqtt服务线程对应的mqtt客户端的id;
71.所述共享内存mqtt客户端信息管理模块被配置为存储和管理mqtt客户端id。
72.本技术提供的一种基于mqtt服务的客户端与主题隔离方法及系统,所述方法包括:配置数个mqtt客户端,每个mqtt客户端对应设置有一个独立的mqtt通讯服务;基于每个独立的mqtt通讯服务生成一个独立的mqtt服务线程;标记每个mqtt服务线程,建立至少一
个mqtt客户端和与其对应的mqtt服务线程之间的通讯;对mqtt服务线程中的订阅/发布主题进行前置量的标记;将标记后的订阅/发布主题打包为订阅/发布主题模块;将订阅/发布主题模块加载到共享内存主题存储管理模块中;标记mqtt服务线程对应的mqtt客户端的id;将mqtt客户端id加载到共享内存mqtt客户端信息管理模块中。
73.本技术的关键之处在于mqtt多线程服务方法、订阅/发布主题前置标记方法和mqtt多线程客户id标记方法。同时采用以上三种措施,可以在mqtt主程序中启动多个独立mqtt通讯服务,服务之间订阅/发布主题与通讯服务之间的客户端id标记实现软隔离。本技术实现了一种mqtt多线程服务之间数据的软隔离方法,可以最大限度的使用计算机资源,与此同时可以降低mqtt服务支持多项目时的软件开发与软件维护成本。
74.以上显示和描述了本技术的基本原理和主要特征以及本技术的优点,对于本领域技术人员而言,显然本技术不限于上述示范性实施例的细节,而且在不背离本技术的精神或基本特征的情况下,能够以其他的具体形式实现本技术。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本技术的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本技术内。
75.此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
76.本技术提供的实施例之间的相似部分相互参见即可,以上提供的具体实施方式只是本技术总的构思下的几个示例,并不构成本技术保护范围的限定。对于本领域的技术人员而言,在不付出创造性劳动的前提下依据本技术方案所扩展出的任何其他实施方式都属于本技术的保护范围。

技术特征:
1.一种基于mqtt服务的客户端与主题隔离方法,其特征在于,包括:配置数个mqtt客户端,每个mqtt客户端对应设置有一个独立的mqtt通讯服务;基于每个独立的mqtt通讯服务生成一个独立的mqtt服务线程;标记每个mqtt服务线程,建立至少一个mqtt客户端和与其对应的mqtt服务线程之间的通讯;对mqtt服务线程中的订阅/发布主题进行前置量的标记;将标记后的订阅/发布主题打包为订阅/发布主题模块;将订阅/发布主题模块加载到共享内存主题存储管理模块中;标记mqtt服务线程对应的mqtt客户端的id;将mqtt客户端id加载到共享内存mqtt客户端信息管理模块中。2.根据权利要求1所述的一种基于mqtt服务的客户端与主题隔离方法,其特征在于,所述标记每个mqtt服务线程的步骤包括:采用通讯服务ip与端口相结合的方式标记当前mqtt服务线程,所述mqtt服务线程支持独立的启动、停止、订阅/发布服务。3.根据权利要求1所述的一种基于mqtt服务的客户端与主题隔离方法,其特征在于,所述对mqtt服务线程中的订阅/发布主题进行前置量的标记的步骤包括:选择不同的前置标记对应不同的mqtt通讯服务线程的订阅/发布主题,所述线程主题的前置标记按照一定规则组合而成。4.根据权利要求1所述的一种基于mqtt服务的客户端与主题隔离方法,其特征在于,所述标记mqtt服务线程对应的mqtt客户端的id的步骤包括:按照线程主题的前置标记规则标记独立的mqtt服务线程对应的客户端id,标记后的客户端id用于明确mqtt客户端与mqtt服务线程的所属关系。5.一种基于mqtt服务的客户端与主题隔离系统,其特征在于,包括mqtt客户端模块、端口标记线程管理模块、主题标记模块、订阅/发布主题模块、共享内存主题存储管理模块、客户端id标记模块和共享内存mqtt客户端信息管理模块,其中:所述mqtt客户端模块包括数个mqtt客户端和对应的独立的mqtt服务线程;所述端口标记线程管理模块被配置为标记mqtt服务线程;所述主题标记模块被配置为对mqtt服务线程中的订阅/发布主题进行前置量的标记;所述订阅/发布主题模块被配置为打包标记后的订阅/发布主题;所述共享内存主题存储管理模块被配置为存储和管理订阅/发布主题模块;所述客户端id标记模块被配置为标记mqtt服务线程对应的mqtt客户端的id;所述共享内存mqtt客户端信息管理模块被配置为存储和管理mqtt客户端id。

技术总结
本申请提供一种基于MQTT服务的客户端与主题隔离方法及系统,所述方法包括:配置数个MQTT客户端,每个MQTT客户端对应设置有一个独立的MQTT通讯服务;基于每个独立的MQTT通讯服务生成一个独立的MQTT服务线程;对MQTT服务线程中的订阅/发布主题进行前置量的标记;将标记后的订阅/发布主题打包为订阅/发布主题模块;将订阅/发布主题模块加载到共享内存主题存储管理模块中;标记MQTT服务线程对应的MQTT客户端的ID;将MQTT客户端ID加载到共享内存MQTT客户端信息管理模块中。本申请采用项目与特定MQTT服务绑定的方式,实现了项目MQTT服务的统一维护,降低了项目的运维成本。降低了项目的运维成本。降低了项目的运维成本。


技术研发人员:陶怡 马玲娜 张良 杨会甲 白春玲 贺庆凯
受保护的技术使用者:西安航天自动化股份有限公司
技术研发日:2023.07.12
技术公布日:2023/9/9
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐