基于MQTT协议物联网文件传输的实现

2023-03-12 20:33张朝兰姜孝均易大江
互联网周刊 2023年4期

张朝兰 姜孝均 易大江

摘要:MQTT协议作为一种即时通信协议,在未来物联网技术的建设与发展中,将会成为其最为重要的组成部分,基于搭建完成的平台连接外部和联网的设备,充当通信桥梁的作用。本文从MQTT协议角度出发,从物模型与主题模型设计、设备状态管理设计、消息路由模块设计、系统安全模块设计、系统集群模块设计等五个角度,系统分析了基于MQTT协议的物联网文件传输系统,探究物联网文件传输的实现路径。

关键词:MQTT协议;物联网文件;消息传输

引言

在智能电网、智能家居、智慧农业、智慧交通、智慧城市、智慧医疗和智能电网等领域中,物联网终端设备利用多种多样的连接方式实现连接,提高设备和云服务器之间的联系强度。基于云平台提供的通信服务、设备管理、分析服务和数据存储功能,实现不同网络范围内、不同区域范围内的各类终端设备信息交互和数据共享,基于“云+端”架构的物联网体系逐渐成为现代互联网体系的经典架构[1]。目前,物联网技术仍旧处于发展的初期阶段,很多物联网技术存在的问题尚未获得解决,网络数据传输实施规范还缺乏统一性。IBM开发的MQTT轻量级信息传输协议,凭借其传输可靠、高及时性、小成本支出优势在各类物联网场景中广泛应用,成为物联网通信协议标准的竞争者[2][3]。

1. MQTT协议实现方式

1.1 MQTT协议特点

MQTT协议作为一种传输消息的协议类型,是以主题订阅模型和消息发布模型为基础的,通信功能的实现则凭借客户端/服务器架构,秉承轻量级、开放性和简单性原则,在有限设备资源、低带宽和不稳定网络环境下都具有适应性,可以为物联网应用提供支持。在对各种类型的信息进行组织和传输时,必须要以实现主题结构层次作为依据。作为信息的发布人员,要在信息传输的过程中将新数据信息进行分发,在代理中高效地连接数据信息。在此之后,借助使用代理的方式将获得的信息分发给已经订阅该主题的全部客户端[4]。MQTT协议特点表现在以下五个方面:

第一,MQTT协议具有比较小的开销,在固定头部的位置处,仅仅有两个字节存在,同时还可以使得协议交换最小化处理,大幅度降低网络流量的消耗量。

第二,在网络中传输MQTT消息,可以屏蔽负载内容,实现不同类型的信息传输目标。

第三,MQTT协议以消息订阅和发布模式作为基础,可以比较方便地实现消息一对多发布与传输,将通信订阅方和通信发布方之间的耦合解除。

第四,MQTT协议交付的信息质量可以分为三种级别,一次正好、一次至少、一次至多。可以以消息的实际传输需求作为依据,将信息的订阅者和发布者信息按照其需求传输到目的地[5]。

第五,MQTT协议可提供Testament机制,又被称作为Last Will机制,在运行服务期间若是出现了客户端异常断开现象,此时服务器将会把相关通知到相关终端完成信息传输。

1.2 MQTT协议通信原理

MQTT协议在发布和订阅信息时是以主题作为依据的。发挥主题的作用构建完成发布信息方和订阅信息方之间的信息传输路径。主题主要是指在应用消息上的附加标签,MQTT客户端和MQTT消息代理服务器组合形成MQTT协议,在图1中展示的是MQTT协议基本结构。

在图1中,MQTT客户端既可以是消息的订阅者,又可以是消息的发布者,是MQTT设备或者程序。消息的发布者可以将应用消息发布到消息代理中,消息的订阅者可以面向消息代理订阅请求接受感兴趣的消息,或者将不需要的订阅内容取消。在请求订阅消息客户端和发送消息客户端之间,MQTT消息代理服务器发挥着中介作用,将客户端发布的应用消息和客户端连接请求予以接收,将订阅的请求取消和将客户端的订阅信息做出处理,除此之外还可将应用信息或者符合条件的信息转发到客户端。

2. MQTT协议中的功能

2.1 订阅功能

订阅(Subscription)功能主要包括最大服务质量(QoS)和主题筛选器,订阅功能会与会话功能形成关联。

2.2 会话功能

将服务器和客户端之间构建连接以后,将会得到会话(Session)。服务器和客户端之间存在状态交互现象,在网络之中必然会存在会话功能,同时在服务器和客户端相互之间连接,可以跨越多个连续网络实现[6]。

当Clean Session处于0的位置时,代理服务器此时就必须要以当前会话状态作为基础,将与客户端之间的通信路径予以恢复。若是服务器端所保存的会话出现丢失,那么要在最短时间完成新的会话构建,从而可以确保将会话信息进行保存。当断开会话的时间段内,服务器设备要客户端定远的交付质量级别为QoS 1和 QoS 2的消息作为状态信息予以保存,当客户端再次登录上线之后,保存的信息将会通过服务器传输到客户端。再者,当消息在传输的过程中出现信息中断现象,此时会话的信息也会被保存,一直持续到客户端重新与服务器完成连接。当Clean Session处于1的位置时,代理服务器必须要将保存的客户端信息全部丢弃,等待客户端重新连接上线之后,也不会再将旧有的消息进行接收,而是要重新订阅。设置这样的标志位主要是为了保证QoS 1和 QoS 2消息具有良好的服务质量,同时当标志位为0的时候,客户端不会将所有交付质量为QoS 1和 QoS 2的信息漏接。

2.3 主题名功能

与应用程序消息的标签进行连接,合理地匹配服务器订阅和标签。服务器可以将信息传输到订阅地匹配标签的全部客户终端[7]。系統主题名(Topic Name):通过定义开头主题得到系统的客户端连接数量等多种系统信息。

2.4 主题筛选功能

一个主题命名通配符筛选器,即主题筛选器(Topic Fiter),可以应用在订阅表达式中,用以完成所匹配的多个主题订阅。多级匹配符#单级匹配符+更多主题讨论。

2.5 负载功能

消息订阅者所具体接收的内容。

3. 基于MQTT协议的物联网文件传输系统设计

3.1 物模型与主题模型设计

使用物联网消息系统对复合设备进行描述时,定义设备可选择使用物模型实现。根据物模型的定义,其本质是JSON格式类型的文件。物模型属于物理空间中的实体,在云端可以利用数字化的方式将工厂、楼宇、车载装置、传感器等表示出来,从事件、服务和属性三个角度对实体的定义、功能、价值做出描述。

3.2 设备状态管理设计

请求处理订阅、推动和取消订阅等业务、使用系统完成其他类型业务的时候,必须要以长期构建稳定的系统和物联网设备连接作为基础。当设备处于运行环节中,将会凭借与系统搭建完成的联系将合法的信息传输到系统中,并且还会建立合法的连接实现请求的发送与接收。在上述环节中,系统首先会详细地验证与处理MQTT协议版本的信息,同时以处理得到的结果作为依据,应用设备认证接口系统性的验证和处理设备的身份信息,利用合理的分析结果和处理数据,科学化地规避非法设备在连接过程中出现的不良现象[8]。

倘若系统处于运行的时候伴随着clientid会话信息的出现,按照系统的服务需求要将建立完成的clientid连接断开,同时还应该彻底清理之前的会话信息,释放出服务器资源,建立完成与之前请求的连接。若是设备在运行的时候出现离线消息,凭借MQTT协议还能够实现离线消息推动。

与Redis存储会话数据的优势和系统开发进行结合,选择应用Redis完成Session信息存储架构设计。所有的客户端在与系统进行连接的时候,按照系统的服务要求,必须要设计、构建并使用具有唯一性的客户端标识,以标识作为基础区别化地处理在系统中的全部连接。在全部的服务器内部完成连接信息和设备标识的对应关系存储,其中连接信息主要包含有MQTT协议的Netty中上下文信息、Clean Session标志位信息等。

3.3 消息路由模块设计

HBase本身不会为系统提供消息列队功能,但是在实际应用期间可以凭借其所具有的特性将虚拟队列的概念予以实现。在离线信息接收模块设计期间,需要为所有的客户端完成唯一ID分配,由此可保证组合单调递增ID和QUEUE ID形具有唯一性的Roekey。与此同时,为了确保能够均匀地写入,规避出现任何数据热点方面的问题,与设计优化Rowkey原理进行结合,对唯一的ID前缀做出合理的设计,在不同的Region中均匀地分布完成Rowkey。

为了确保有序地写入消息,需要将唯一的ID分配给所有设备所有离线消息,例如设备sitech第208条信息分配的ID为sitech_208。以批量的方式写入消息,首先要使用枷锁操作对每个队列做出处理,其次为所有的消息分配ID,在HBase中写入离线消息,随后将所有队列的锁释放。这种方法在实际应用期间可以确保多个服务节点在并发地将写入的消息传输到设备离线消息队列的时候不再出现数据方面的冲突[9]。

当QoS为0的时候,消息在进行分发的时候需要以基层网络能力作为依据,但是信息的发布人员只能够发布一次消息,并且信息的接收人员不能对接收的信息进行回答,信息的发布人员不会存储信息,也不会再次发布。当QoS为1的时候,可以确保消息至少可以发送一次,利用简单的ACK机制将消息系统保证QoS 1。此时,设备在传输各类信息的过程中,将会等待PUBACK报文的影带,倘若设备在规定的时间范围内没有接收到PUBACK报文的回答,此时设备将会将信息的DUP设置为1,并且将消息重新发送。当QoS为2的时候,消息的订阅者和发布者可以利用两次会话的机会保证消息完成一次传输,这种方法是MQTT协议里面消息质量等级最高的[10]。

结语

物联网发展是以物联网网络通信技术为基础而实现的。随着物联网应用和物联网技术的发展,物与物之间的数据信息传输已经难以满足系统中网络数据传输需求,越来越多的应用系统需要实现文件数据传输。本文基于MQTT协议,分析该协议的特点和应用原理,与文件传输需求相结合,思考基于MQTT协议的物联网文件传输系统设计要点,为相关研究人员提供理论和实践参考。

参考文献:

[1]吕元,夏振华,肖一帆.基于MQTT的2物联网终端的PLC远程工业监控[J].电脑知识与技术:学术交流,2022,18 (10):113-115.

[2]郭翠娟,暴宁,荣锋.基于MQTT的物联网平台研究与设计[J].计算机工程与设计, 2022,43(8):2378-2384.

[3]沈刚华.基于MQTT物联网协议的室内小区自动化监测系统[J].通信电源技术,2022, 39(3):5.

[4]陈文艺,梁宁宁,杨辉.基于MQTT的物联网网关双向通信系统设计[J].传感器与微系统, 2022,41(8):100-103.

[5]叶康林,钟瑾瑞,焦冠文,等.基于MQTT协议的生产实时数据传输技术应用研究[J].信息系统工程,2021,(11):65-68.

[6]林楷焱,钟俊健,陶铭.基于物联網技术的智能停车场系统设计与实现[J].物联网技术, 2022,12(6):93-95.

[7]施昕昕,顾宇扬.基于MQTT协议的工业物联网数据采集和控制系统[J].南京工程学院学报:自然科学版,2022,20(2):31-37.

[8]张状状,蒋伟,胡静,等.MQTT大块数据安全传输方案的设计与实现[J].信息与电脑, 2022, 34(9):218-222.

[9]Clissa Luca,Lassnig Mario,Rinaldi Lorenzo.Analyzing WLCG File Transfer Errors Through Machine Learning[J].Computing and Software for Big Science,2022,6(1):19-20.

[10]曾灶荣,陈德基,肖杨.基于区块链和MQTT的物联网通信协议[J].电子技术(上海),2022,51(5):15-19.

作者简介:张朝兰,本科,副教授,研究方向:电子信息和电气控制类教育教学与项目管理;姜孝均,本科,副教授,研究方向:电子信息和电气控制类教育教学与项目管理;易大江,本科,高级工程师,研究方向:软件物联网通信项目开发及管理。

基金项目:物联网电梯应急救援系统应用研究(编号:遵市科合HZ字〔2022〕38号);遵义市配电智能运维创新人才团队(编号:遵市科人才〔2022〕4号)。