物联网协议之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的分享

相关推荐
华奥系科技13 小时前
智慧经济新格局:解码社区、园区与城市一体化建设逻辑
大数据·人工智能·科技·物联网·安全
TDengine (老段)13 小时前
TDengine IDMP 组态面板 —— 画布
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
蓝奥声科技19 小时前
扩展式智能插座,破解多国标准与定制需求的新思路
物联网·智能用电计量插座·lpiot 低功耗物联网·外贸插座
Zevalin爱灰灰20 小时前
零基础入门学用物联网(ESP8266) 第一部分 基础知识篇(三)
单片机·物联网·嵌入式·esp8266
我爱我家88221 小时前
亚洲艺术电影节携澳门文化亮相深圳
人工智能·物联网·算法·区块链·爬山算法
物联通信量讯说21 小时前
从5G迈向未来通信时代,量讯物联深耕连接基础能力
物联网·5g·信息与通信·iot·通信·6g·量讯物联
搜佛说1 天前
RocksDB, SQLite, TDengine Edge, LiteDB与sfsDb选型
物联网·edge·sqlite·边缘计算·时序数据库·iot·tdengine
沐欣工作室_lvyiyi1 天前
基于物联网的体温心率监测系统(论文+源码)
stm32·单片机·嵌入式硬件·物联网·体温心率
QYR_111 天前
香叶醇行业深度解析:香精香料领域核心原料的发展潜力与挑战
大数据·人工智能·物联网
taxunjishu2 天前
塔讯总线协议转换信捷 PLC 对接 TCP/IP 设备实战方案
网络·物联网·自动化