随笔 - 2649  文章 - 2452  评论 - 0  阅读 - 74060

什么是Topic

什么是Topic

在发布/订阅消息的MQTT协议中,Topic用于定义消息传输的通道和路径,设备通过Topic将消息发布到物联网平台,物联网平台将消息发送给订阅Topic的设备。为方便海量设备基于Topic进行通信,简化授权操作,物联网平台定义了产品Topic类和设备Topic。本文介绍MQTT协议的原理、Topic的概念及分类。

工作原理

image

在上图中分为设备、物联网平台和业务服务器三端,其中设备和物联网平台的通信基于MQTT协议。设备、业务服务器、物联网平台的通信过程请参见使用Topic通信

  • MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模型的消息传输协议,具有低开销、高拓展、协议简单、双向通信等优点,可以利用较少的设备资源和网络资源实现可靠、高效的长连接,被广泛应用于物联网领域。目前物联网平台支持5.0、3.1.1和3.1版本MQTT协议,协议规范请参见MQTT协议规范
  • MQTT客户端(Client)MQTT代理者(Broker)
    • MQTT客户端(Client):本文的客户端(Client)指接入物联网平台的设备。设备和用户的服务器不直接建立连接,而是通过代理者(Broker)进行通信。
    • MQTT代理者(Broker):本文的MQTT代理者(Broker)指阿里云物联网平台。代理者(Broker)是设备和业务服务器消息通信的中介,解耦了设备和业务服务器,实现了设备和业务服务器之间的异步通信。
  • MQTT协议消息的组成部分
    • 主题(Topic):使用正斜杠(/)作为分隔符构造字符串,例如/${productKey}/${deviceName}/user/update,订阅该Topic的所有设备都会收到消息。
    • 消息内容(Payload):消息的具体内容。
  • MQTT协议消息的传输过程,以业务服务器向设备下发消息为例
    1. 设备订阅相应的主题(Topic)。
    2. 服务器发送消息给物联网平台。
    3. 物联网平台接收消息,根据消息的主题(Topic)确定设备并发送消息。
    4. 业务服务器收到物联网平台的消息,确认消息已成功发送。
  • MQTT协议的重要参数,更多参数请参见MQTT协议规范
    • 消息服务质量(QoS):QoS=0代表物联网平台只推送一次消息给订阅者,QoS=1代表订阅者收到消息后必须返回puback给发布者,否则会一直推送消息。更多信息,请参见订阅选项
    • 保活时间:当设备发起连接时会向物联网平台发送CONNECT消息,物联网平台使用CONNACK消息进行响应并保持连接,设备在保活时间间隔内至少需要发送一次报文,否则物联网平台会断开与设备的连接。更多信息,请参见MQTT保活使用示例
    • 清除会话:设备和物联网的会话状态是临时或持久。更多信息,请参见会话过期

使用限制

Topic相关、设备接入、连接通信等使用限制,请参见使用限制

Topic类型

详细的Topic说明,请参见本文末尾的Topic分类和通信说明

  • 基础通信Topic:设备使用物联网平台的物模型通信、OTA升级、任务管理等功能,必须使用的Topic。
  • 物模型Topic:物模型是对设备实际功能的抽象,从属性服务事件三个维度,分别描述了该实体是什么、能做什么、能提供什么信息。例如智能风扇的开关状态是属性,开关的操作是服务,报警是事件。物模型的概念和使用,请参见什么是物模型
  • 自定义Topic:如果物模型不能满足您的业务需求,可以使用自定义Topic,自定义Topic的前三个类目/ProductKey/${deviceName}/user已固定。管理和使用自定义Topic的操作,请参见使用自定义Topic通信

产品Topic类和设备Topic的概念

  • 基础通信Topic和物模型Topic由物联网平台定义,以/sys/ota/shadow开头。使用物模型Topic通信,需要先在产品下创建物模型。请参见单个添加物模型批量添加物模型

  • 自定义Topic需要用户自行创建。产品的自定义Topic类设备Topic的关系如下图:

    image

    1. 每个产品只有一个ProductKey,每个ProductKey下有多个Topic类,每个Topic类对ProductKey下所有设备通用。

    2. 产品Topic类是同一产品下所有设备的相同功能Topic的集合,以/${productKey}/${deviceName}开头。

      1. Topic类的功能

        Topic类以正斜线(/)开头并分隔每个类目,例如:/${productKey}/${deviceName}/user/update${productKey}${deviceName}为固定类目,前缀、后缀类目用于区分不同功能的消息。

        • ${productKey}表示产品的标识符ProductKey。在指定产品的Topic类中,需替换为具体产品的ProductKey值例如a19mzP****
        • ${deviceName}表示设备名称。在产品Topic类中,${deviceName}代表该产品下所有设备,不需要替换为实际设备名称。
      2. Topic类的操作权限。权限的主体是设备发布权限代表设备向该Topic类下的设备Topic发布消息,订阅权限代表设备接收物联网平台的数据。

        • 服务器接收设备数据,需要设置Topic类的权限为发布。

        • 服务器向设备下发数据,需要设置Topic类的权限为订阅。

          说明

          定义产品Topic类后,需要设备主动订阅具有订阅权限的Topic,相应Topic才会出现在设备详情页的Topic列表页签。设备订阅Topic的操作,请参见使用Topic通信

    3. 设备Topic。添加设备后,产品的所有自定义Topic类会自动映射到设备上,生成具体的设备Topic。产品Topic类定义的操作权限,会映射到具体的设备Topic。在产品Topic类基础上,使用具体的设备名称例如device1替换产品Topic类中的${deviceName},得到设备Topic例如:/a19mzP****/device1/user/update

    4. 设备Topic归属于对应的设备,可用于消息通信。基于Topic的通信过程请参见使用Topic通信

定义设备Topic的流程

  1. 物联网平台控制台,创建产品。具体操作,请参见创建产品

    创建产品后,物联网平台为该产品预定义了Topic类,包含基础通信Topic物模型通信Topic自定义Topic。在产品详情页面,单击Topic类列表页签,查看各功能及其Topic类。

  2. 为产品添加设备。具体操作,请参见创建设备

  3. 创建产品的自定义Topic类。具体操作,请参见使用自定义Topic通信

Topic分类和通信说明

物联网平台预定义的产品Topic类对应的设备Topic包含基础通信Topic、物模型通信Topic和自定义Topic三种类型,详细说明见下表。

类型 Topic类及数据格式 说明
基础通信Topic OTA升级 设备OTA升级消息的Topic,包括设备上报OTA模块版本、物联网平台推送升级包信息、设备上报升级进度和设备请求获取最新升级包信息。
设备标签 上报设备标签的Topic,上报设备的部分信息,如厂商、设备型号等。
时钟同步 NTP服务同步请求和响应的Topic,解决嵌入式设备资源受限,系统不包含NTP服务,端上没有精确时间戳的问题。
设备影子 设备影子数据通过Topic进行流转,包括设备影子发布和设备接收影子变更。
配置更新 设备主动请求配置信息和物联网平台推送配置信息的Topic。开发人员可在不用重启设备或中断设备运行的情况下,在线远程更新设备的系统参数、网络参数等配置信息。
广播 广播Topic。调用云端API PubBroadcast向订阅了该Topic的所有设备发送广播消息,实现批量控制设备。
物模型通信Topic 属性上报 各物模型功能的Topic。说明在物联网平台,不可以调用Pub接口向物模型通信Topic发送消息。在物联网平台的云端,通过物模型功能远程控制设备,请调用SetDevicePropertySetDevicesProperty设置设备属性值;调用InvokeThingServiceInvokeThingsService调用设备服务。
属性设置
事件上报
服务调用
自定义Topic 自定义Topic类及格式 系统默认提供了3个自定义Topic类。您可根据业务需求,自定义Topic类。Topic类是一个Topic模板配置,编辑更新某个Topic类后,可能对产品下所有设备使用该类Topic通信产生影响。建议在设备研发阶段设计好,设备上线后不再变更Topic类。

相关文档

常见问题

posted on   AtlasLapetos  阅读(181)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示