本发明涉及物联网,尤其涉及一种基于多实例微服务组建mqtt代理集群的方法、装置及介质。
背景技术:
1、mqtt(message queuing telemetry transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的轻量级通讯协议。mqtt协议的最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,mqtt协议在物联网、小型设备、移动应用等方面有较广泛的应用。因此,物联网平台的mqtt代理是否支持横向扩容、负载均衡等高可用特性直接影响到平台能接入设备的数量和性能。目前集群的创建和扩容都需要人工参与,无法实现自动动态收缩,进而无法保证服务的高可用。而既支持微服务部署,又支持多实例集群的mqtt代理服务,全都依赖第三方组件。第三方组件运行的稳定性会影响mqtt代理服务集群运行的稳定性,并且,多依赖一个组件,系统就要多引入一个配置,增加了系统维护的难度。
技术实现思路
1、本发明所要解决的技术问题在于,提供一种基于多实例微服务组建mqtt代理集群的方法、装置及介质,使mqtt代理服务可以在容器云里多实例部署,且在不依赖第三方组件的情况下,支持服务的注册、发现以及实例间信息同步,支持自动扩容缩容以及负载均衡,有效提升了mqtt代理服务的高可用性。
2、为了实现上述目的,本发明实施例提供了一种基于多实例微服务组建mqtt代理集群的方法,包括:
3、基于kubernetes容器服务平台为mqtt代理服务创建无头服务,并将无头服务名写入部署文件的环境变量;
4、启动若干个mqtt代理实例;
5、通过所述环境变量读取所述mqtt代理服务的所述无头服务名,并通过内部dns对所述无头服务名进行解析,得到每一所述mqtt代理实例的ip地址;
6、根据每一所述mqtt代理实例的ip地址组建mqtt代理集群,当所述mqtt代理集群中有mqtt代理实例加入或退出时,向所述mqtt代理集群中的其他mqtt代理实例进行广播。
7、作为上述方案的改进,所述根据每一所述mqtt代理实例的ip地址组建mqtt代理集群,具体包括:
8、若存在所述mqtt代理集群,则将所述mqtt代理实例的ip地址加入所述mqtt代理集群;
9、若不存在所述mqtt代理集群,则根据所述mqtt代理实例的ip地址组建新的mqtt代理集群。
10、作为上述方案的改进,所述方法还包括:
11、接收mqtt客户端设备发送的连接请求,从所述mqtt代理集群中随机选取一个mqtt代理实例与所述mqtt客户端设备建立连接;
12、对所述mqtt客户端设备进行安全验证,若所述mqtt客户端设备通过安全验证,则将所述mqtt客户端设备上线,同时与所述mqtt客户端设备连接的mqtt代理实例向所述mqtt代理集群中的其他mqtt代理实例发送第一广播消息;
13、接收所述mqtt客户端设备发送的断开连接请求或所述mqtt客户端设备下线时,与所述mqtt客户端设备连接的mqtt代理实例向所述mqtt代理集群中的其他mqtt代理实例发送第二广播消息。
14、作为上述方案的改进,所述方法还包括:
15、接收所述mqtt客户端设备发送的订阅请求或取消订阅请求;
16、对所述订阅请求或所述取消订阅请求进行合法性验证,若所述订阅请求或所述取消订阅请求通过合法性验证,则与所述mqtt客户端设备连接的mqtt代理实例向所述mqtt代理集群中的其他mqtt代理实例发送第三广播消息。
17、作为上述方案的改进,所述方法还包括:
18、接收所述mqtt客户端设备发送的数据发布操作;
19、对所述数据发布操作进行合法性验证,若所述数据发布操作通过合法性验证,则与所述mqtt客户端设备连接的mqtt代理实例向所述mqtt代理集群中的其他mqtt代理实例发送第四广播消息。
20、作为上述方案的改进,所述方法还包括:
21、当接收到所述mqtt客户端设备发送的数据发布操作时,判断在所述mqtt代理集群中是否有与其他mqtt代理实例连接的其他mqtt客户端设备订阅了相关话题;
22、若有,则将所述mqtt客户端设备发送的数据发送至对应的已订阅相关话题的mqtt客户端设备。
23、作为上述方案的改进,所述方法还包括:
24、当所述mqtt代理集群中有mqtt代理实例退出时,删除退出的mqtt代理实例广播的全部消息。
25、本发明实施例还提供了一种基于多实例微服务组建mqtt代理集群的装置,包括:
26、服务创建模块,用于基于kubernetes容器服务平台为mqtt代理服务创建无头服务,并将无头服务名写入部署文件的环境变量;
27、实例启动模块,用于启动若干个mqtt代理实例;
28、地址解析模块,用于通过所述环境变量读取所述mqtt代理服务的所述无头服务名,并通过内部dns对所述无头服务名进行解析,得到每一所述mqtt代理实例的ip地址;
29、集群组建模块,用于根据每一所述mqtt代理实例的ip地址组建mqtt代理集群,当所述mqtt代理集群中有mqtt代理实例加入或退出时,向所述mqtt代理集群中的其他mqtt代理实例进行广播。
30、本发明实施例还提供了一种基于多实例微服务组建mqtt代理集群的装置,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述的基于多实例微服务组建mqtt代理集群的方法。
31、本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行上述任一项所述的基于多实例微服务组建mqtt代理集群的方法。
32、相对于现有技术,本发明实施例提供的一种基于多实例微服务组建mqtt代理集群的方法、装置及介质的有益效果在于:通过基于kubernetes容器服务平台为mqtt代理服务创建无头服务,并将无头服务名写入部署文件的环境变量;启动若干个mqtt代理实例;通过所述环境变量读取所述mqtt代理服务的所述无头服务名,并通过内部dns对所述无头服务名进行解析,得到每一所述mqtt代理实例的ip地址;根据每一所述mqtt代理实例的ip地址组建mqtt代理集群,当所述mqtt代理集群中有mqtt代理实例加入或退出时,向所述mqtt代理集群中的其他mqtt代理实例进行广播。本发明实施例能够使mqtt代理服务可以在容器云里多实例部署,且在不依赖第三方组件的情况下,支持服务的注册、发现以及实例间信息同步,支持自动扩容缩容以及负载均衡,有效提升了mqtt代理服务的高可用性。
1.一种基于多实例微服务组建mqtt代理集群的方法,其特征在于,包括:
2.如权利要求1所述的基于多实例微服务组建mqtt代理集群的方法,其特征在于,所述根据每一所述mqtt代理实例的ip地址组建mqtt代理集群,具体包括:
3.如权利要求2所述的基于多实例微服务组建mqtt代理集群的方法,其特征在于,所述方法还包括:
4.如权利要求3所述的基于多实例微服务组建mqtt代理集群的方法,其特征在于,所述方法还包括:
5.如权利要求4所述的基于多实例微服务组建mqtt代理集群的方法,其特征在于,所述方法还包括:
6.如权利要求5所述的基于多实例微服务组建mqtt代理集群的方法,其特征在于,所述方法还包括:
7.如权利要求6所述的基于多实例微服务组建mqtt代理集群的方法,其特征在于,所述方法还包括:
8.一种基于多实例微服务组建mqtt代理集群的装置,其特征在于,包括:
9.一种基于多实例微服务组建mqtt代理集群的装置,其特征在于,包括处理器和存储器,所述存储器中存储有计算机程序,且所述计算机程序被配置为由所述处理器执行,所述处理器执行所述计算机程序时实现如权利要求1至7中任意一项所述的基于多实例微服务组建mqtt代理集群的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,其中,所述计算机可读存储介质所在设备执行所述计算机程序时,实现如权利要求1至7中任意一项所述的基于多实例微服务组建mqtt代理集群的方法。