亿佰特研发生产的串口服务器、CAN-bus转以太网CAN模组、以太网边缘采集IO网关等系列产品拥有MQTT工作模式,在此工作模式下,可以选择使用阿里云等平台进行相关测试与通信。
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息传输协议,广泛应用于物联网(IoT)领域。MQTT协议核心特性之一是QoS(Quality of Service,服务质量),通过定义消息传递的可靠性级别,适应不同的网络环境和业务需求。本文将深入解析MQTT的QoS三级服务等级,并结合实际场景举例说明其应用场景和特点。
MQTT协议的QoS(服务质量)其实就是消息传递的可靠性等级,分三个级别,对应不同的“靠谱程度”。
-本质:发出去就不管了,不确认也不重传。
-适合场景:比如监控办公室温度,偶尔丢几条数据没关系,反正不影响整体趋势。
-本质:发完会等对方回个“收到”,没回就一直重发,但可能会重复。
-适合场景:比如远程控制家里空调关机,怕指令没传到,但重复关一次也没啥问题。
-本质:玩命保证消息不丢不重,但流程复杂,传输时间长。
-适合场景:比如银行转账,必须确保指令绝对准确,不能多扣钱也不能漏掉。
场景举例:做工厂设备监控系统,传感器每秒上传一次数据。
踩坑经历:一开始用QoS1,结果发现数据量太大,服务器扛不住。后来改用QoS0,虽然偶尔丢数据,但分析趋势时影响不大,反而系统更稳定了。
经验总结:网络环境好+数据允许少量丢失=选QoS0。
场景举例:客户要做智能门锁远程解锁功能。
踩坑经历:用QoS1后发现,偶尔因为网络延迟,门锁会收到重复的“开锁”指令,会导致用户反馈“锁老是自己开”。可在业务层加了个去重逻辑,比如30秒内重复指令直接忽略。
经验总结:控制类指令选QoS1,但业务层必须处理重复问题。
场景举例:医疗设备上传患者生命体征数据到云端。
踩坑经历:因为用QoS1,某次网络波动导致数据丢失,差点耽误诊断。后面硬着头皮改成QoS2,传输速度慢了点,但数据绝对不丢不重。
经验总结:医疗/金融这种敏感场景,必须用QoS2,哪怕牺牲性能。
-网络稳定(比如局域网)→QoS1足够。
-网络差(比如移动网络)→QoS2更安心。
-数据趋势分析→QoS0。
-控制类指令→QoS1。
-金融/医疗等高风险场景→QoS2。
-QoS2虽然可靠,但消息要存状态、多握手,对设备内存和CPU要求高。如果设备是低端单片机,别硬上QoS2。
真相:QoS2的开销是QoS0的5倍以上!比如我们做过测试,1000条消息用QoS2比QoS0多耗电30%。
真相:如果发送方发完消息就断网了,PUBACK可能收不到,这时候消息其实丢了。QoS1只能保证“至少一次”,但极端情况下还是可能失败。
真相:QoS1的重复消息必须自己处理!比如我们之前做智能电表抄表,重复指令导致电量记录出错,后来加了个“唯一ID+缓存校验”才解决。
五、总结一下
小亿经验建议:
新手建议:先从QoS1练手,熟悉协议流程后再尝试QoS2。
调试技巧:用Wireshark抓包看看QoS握手过程,能快速定位问题。
性能优化:QoS2的消息ID别用UUID,用递增的整数,省内存。
今天的分享就到这里啦,EBYTE每一天都致力于更好的助力物联化、智能化、自动化的发展,提升资源利用率,更多无线数传模块产品和物联网应用技术资料,感兴趣的小伙伴可以登录我们的亿佰特官网和企业公众号(微信号:cdebyte)进行了解,也可以直接拨打400电话咨询技术专员!
相关阅读:
7 X 24 销售服务热线
4000-330-990深圳办事处柯经理:18218726658 无锡办事处刘经理:13558641933
成都总部销售经理:
秦 科(无线模块):18884314654 冯子恒(无线模块):18828049434
蔡友银(无线模块):13882211021 葛宇龙(通信设备):19138800613
胡兵(外贸销售经理):18584911141、 sales06@ebyte.com
业务邮箱:support@cdebyte.com 全国销售投诉电话:19934352316
地址:四川省成都市高新西区西区大道199号B5栋(前台座机:028-61543675)
©© 成都亿佰特电子科技有限公司【版权所有】 蜀ICP备13019384号