物联网协议之MQTT(一)基础概念和设备

前言: 本文内容均以实战出发,像MQTT概念这种基础内容建议大家自行百度。

推荐资料: mica-mqtt文档

一、MQTT简单介绍

作为当今物联网的主流协议,MQTT的使用范围非常广,如果你想了解甚至是从事物联网行业,MQTT是避不开的。

1.1 clientId

看名字不难看出,clientId就是客户端的ID,服务端可以通过clientId判断出对应的是哪台设备。

ID就意味着唯一,所以请在定义clientId时保证它的唯一性,如果重复,可能导致两个设备互踢下线的情况。

  1. 唯一性: 保证clientId的唯一,才能做到对设备的唯一识别;
  2. 长度限制: 根据不同的MQTT,一般都有长度限制,有限制23个字符的,有64个字符的。所以,建议大家不要超过20个字符。
  3. 别用特殊字符: 这个其实大家都懂吧,别那么有个性,容易出奇奇怪怪的问题。尽量用大小写字母数字_-,这四种就行,实测没毛病。

1.2 Topic

Topic是MQTT中很重要的概念,消息的分类标签,客户端通过订阅或发布特定的主题来进行消息交互。大家可以把它简单理解为我们代码里API接口(就是controller写的那个),都是以斜杠/分隔。当然,如果你是Kafka之类MQ消息队列的使用者,对Topic的概念应该不陌生。下面举个例子。

名称 Topic地址
实时数据 /mqtt/xxx/xxx/live
历史数据 /mqtt/xxx/xxx/history
告警事件 /mqtt/xxx/xxx/event
下发控制 /cloud/xxx/xxx/switch

中间的两层xxx一般是设备的编号信息。👆上面只是举例Topic的格式,并不是说所有的MQTT设备都有这些Topic。

1.2.1 Topic应用场景

  1. 实时监控: 通过订阅相关Topic,实时接收设备状态和数据,实现对设备的实时监控;
  2. 远程控制: 通过发布命令到特定Topic,实现对远程设备的控制和操作;
  3. 报警通知: 当设备检测到异常情况时,通过发布报警消息到指定Topic,及时通知相关人员或系统;
  4. 数据采集: 通过订阅数据Topic,集中采集和处理来自多个设备的数据。

1.2.2 Topic命名习惯

以下信息主要是以标准网关为例,并不是强制要求。

一般标准的Topic格式有以下特征:

  1. 统一的开头: 一般第一层是传输方向,比如上面表格的例子。以/mqtt开头为设备上报到服务端,以/cloud开头为服务端下发到设备控制;
  2. 统一的结尾: 一般最后一层是传输方向,比如上面表格的例子。以/live结尾为设备上报实时数据,以/history结尾为设备上报历史数据;
  3. 自带设备编号: Topic的中间部分一般是网关的pkey、sn或者clientId。

当然,我们是可以在MQTT服务中自定义Topic,格式可以根据大家的个人习惯。但是希望大家每种功能都定义一个Topic ,而不是在消息体内用type之类的字段来区分。

1.2.3 Topic通配符

以上面表格为例,一般Topic中间会有代表设备编号或clientId,不可能每个设备都写个订阅,一般都以通配符表示。以表格第一行的/mqtt/xxx/xxx/liveTopic为例,我们简单演示两种通配符的使用。

  1. 匹配多层的# #可以模糊匹配多层,比如:我们可以用/mqtt/#/live表示上面的例子;
  2. 匹配单层的+ +可以模糊匹配单层,比如:我们可以用/mqtt/+/+/live表示上面的例子。

1.2.4 Topic共享订阅

这个功能一般是在服务端分发数据的时候时候,这个功能非常好用。后面会有单独的篇幅介绍,不了解的谨慎使用。

一般而言多个客户端订阅同一个Topic,那么所有的客户端都会收到Topic的消息。但是,有时候我们只想有一个客户端收到数据。比如,数据量非常大时,我想用多个客户端来分担压力,这个时候就需要用到共享订阅。

简单来说,共享订阅类似Nginx的负载均衡,服务端会把数据随机分到到一个客户端。

1.2.4.1 单组共享订阅

订阅Topic加上前缀 $queue/(请注意后面有个/),当多个客户端订阅了Topic $queue/xxx,发布者发布到 Topicxxx时 ,则只有一个客户端会接收到消息。

1.2.4.1 分组共享订阅

订阅Topic加上前缀 $share/<group>/(请注意后面有个/,中间<group>是分组的意思,可以用随便什么字符表示),当客户端订阅了Topic $share/aaa/xxx$share/bbb/xxx,发布者发布到 Topicxxx时 ,则每个分组中只有一个客户端会接收到消息。

相信大家肯定注意到共享订阅前缀最后的 /,所以如果你的Topic是以/开头,那么会出现两个/,比如Topic是/mqtt/xxx/xxx/live,共享订阅Topic就是$queue//mqtt/xxx/xxx/live,这样看起来比较奇怪。所以,一般自定义的共享订阅,我开头的/是不写的。大家一定注意⚠️!!!!!!!!!

1.3 QoS

这个其实挺重要的,但是我们物联网一般也不需要单独设置,大家可以参考下mica-mqtt的文档了解下就行:mica-mqtt

1.4 消息体

MQTT传输的消息,一般收到是字节数组byte[],转成字符串就行,就能获取到真正的信息。

二、MQTT常用工具

工具的使用后面会单开一章,有些会有特殊用法。

2.1 EMQX

理论上说,EMQX不能说是一个工具,它是一个平台或者说一个系统。有开源版,也有更强的云服务和企业版,但是一般的小中型物联网平台,开源版足够了。

EMQX文档地址:EMQX文档

虽然EMQX很出名,使用的用户很多,但是正因如此。强烈建议大家不要把EMQX作为数据接收服务,暴露在公网,很可能因为EMQX的某些可能存在的漏洞影响整个平台。

2.1 MQTTX

通过网盘分享的文件:emqx-5.3.2-windows-amd64.zip

链接: https://pan.baidu.com/s/1BYmqQQaPHkshyf-vkFK5Sw?pwd=hpua 提取码: hpua

--来自百度网盘超级会员v9的分享

相关推荐
珠海西格电力17 小时前
零碳园区如何优化能源结构?
运维·人工智能·物联网·架构·能源
MINGNUO明诺18 小时前
科技净尘,智领未来——苏州丰川电子启用E800W驾驶式扫地车赋能精密制造
物联网
雪兽软件20 小时前
物联网在日常生活中的应用
物联网
1621B驱动芯片原厂21 小时前
深圳市远乐科技有限公司 2026 产品手册解读总结
科技·单片机·嵌入式硬件·mcu·物联网·51单片机
北京耐用通信21 小时前
耐达讯自动化Can转Profibus网关让传感器连接不再踩坑
人工智能·科技·物联网·自动化·信息与通信
星空真迷人21 小时前
恶劣环境稳如钟?CAN 总线是 “工业神经”
stm32·嵌入式硬件·mcu·物联网·iot
TDengine (老段)1 天前
TDengine Java 连接器进阶指南
java·大数据·开发语言·数据库·物联网·时序数据库·tdengine
SmartRadio1 天前
ESP32-S3 (ESP-IDF) 动态修改BLE设备名称 完整实现方案
单片机·嵌入式硬件·物联网
珠海西格电力1 天前
零碳园区如何吸引企业入驻?
大数据·物联网·产品运营·能源
jkyy20142 天前
食材图像识别与个性化饮食:智能家电如何重构膳食健康管理?
大数据·人工智能·物联网·健康医疗