全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 更多
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 智能硬件
阿里云物联网套件

Topic

更新时间:2018-04-08 09:31:49

MQTT协议和CoAP协议都支持Pub/Sub的通信方式,Pub/Sub是基于Topic路由转发消息的。

讲解Topic之前,先介绍一下另一个概念:Topic类

Topic类

为了方便海量设备基于海量Topic进行Pub/Sub通信,简化授权操作,物联网套件增加Topic类的概念,用户创建产品后,套件会为每个产品自动创建默认的Topic类,并将Topic映射到对应的设备上,不需要用户单独为每个设备授权Topic。如下图:Topic类

Topic类的特性:

  • Topic类是一类Topic的集合,举个例子,Topic类:/${productKey}/${deviceName}/update是具体Topic:/${productKey}/device1/update或者/${productKey}/device2/update的集合。
  • Topic类格式必须以“/”进行分层,区分每个类目。其中前两个类目已经规定好,第一个${productKey}代表产品标识ProductKey,第二类目${deviceName}通配deviceName
  • 用户Topic类是由用户自定义的Topic类,一般采用/${productKey}开头,主要面向基础版产品提供使用,方便用户根据业务需求进行更为灵活的消息通信;
  • 系统Topic类是由系统预定义的Topic类,相对于用户Topic类来说,不支持用户自定义,不直接采用/${productKey}开头,例如高级版中针对物模型所提供的Topic类一般采用/sys/开头,固件升级相关的Topic类采用/ota/开头,设备影子的Topic类采用/shadow/开头;
  • 在基础版中,用户Topic类的命名只能包含字母,数字和下划线(_)命名每级类目,每级类目不能为空,高级版中的Topic类不支持自定义和修改类目名称;

注意:Topic类不能用于通信,pub/sub是基于具体的Topic通信。举个例子,用户不能使用/${productKey}/${deviceName}/update进行通信,只能使用/${productKey}/device1/update或者/${productKey}/device2/update通信。

Topic

Topic的一些特性:

  • Topic归属于相对应的设备,不能被其他设备用于pub/sub通信。举个例子,Topic:/${productKey}/device1/update归属于设备device1,只能被device1用于发布订阅消息,而不能被设备device2用于发布订阅消息。
  • Topic是根据deviceName从Topic类中映射动态创建而来的,只有当deviceName创建存在时,对应的Topic才会创建,而且这个Topic只能被该设备通信使用。
  • Topic格式和Topic类一致,区别在于Topic类第二个类目是一个通配符${deviceName},而Topic则是具体的deviceName。

通配符

通配符 描述
# 这个通配符必须出现在最后一个类目,代表本级及下级所有类目,例如Topic为/productKey/#,这不仅可以代表/productKey/device1/update,也可以代表/productKey/device1/update/error
+ 代表本级所有类目,例如Topic为/productKey/+/update,可以代表/${productKey}/device1/update,又可以代表/${productKey}/device2/update。Topic类中${deviceName}就是+的一种用法,只不过规定通配的内容必须是deviceName
  • 同一个类目只能出现一个通配符,例如/${productKey}/##或者/${productKey}/++/tem都不合法。

注意:通配符只能在配置规则引擎时使用

Topic列表

基础版默认Topic

基础版支持用户自定义Topic类,为方便开发者使用,创建产品之后自动创建三个默认的用户Topic类和一个系统Topic类,您可以直接使用或添加更多自定义Topic类。

三个默认的用户Topic类,分别为:

  • 设备上报数据,设备操作权限:发布
  1. /${productKey}/${deviceName}/update
  • 设备上报错误,设备操作权限:发布
  1. /${productKey}/${deviceName}/update/error
  • 云端获取设备数据,设备操作权限:订阅
  1. /${productKey}/${deviceName}/get

一个系统Topic类,用于设备上报标签信息:

  • 设备上报标签,设备操作权限:发布
  1. /sys/${productKey}/${deviceName}/thing/deviceinfo/update

高级版默认Topic

高级版提供默认的系统Topic,不支持用户自定义,您可以直接使用SDK实现消息通信,或基于系统Topic自行实现设备数据的上下行。

  • 设备属性上报,设备操作权限:发布
  1. /sys/${productKey}/${deviceName}/thing/event/property/post
  • 设备属性设置,设备操作权限:订阅
  1. /sys/${productKey}/${deviceName}/thing/service/property/set
  • 设备事件上报,设备操作权限:发布
  1. /sys/${productKey}/${deviceName}/thing/event/{tsl.event.identifer}/post
  • 设备服务调用,设备操作权限:订阅
  1. /sys/${productKey}/${deviceName}/thing/service/{tsl.service.identifer}
  • 设备上报标签,设备操作权限:发布
  1. /sys/${productKey}/${deviceName}/thing/deviceinfo/update

设备影子相关Topic

设备影子提供系统Topic类,主要用于基础版产品的影子更新。

  • 更新设备影子,设备和应用程序操作权限:发布
  1. /shadow/update/${productKey}/${deviceName}
  • 获取设备影子,设备操作权限:订阅
  1. /shadow/get/${productKey}/${deviceName}

远程配置相关Topic

远程配置提供系统Topic类,主要用于高级版的设备远程配置更新。

  • 设备接收云端的配置信息推送,设备操作权限:订阅
  1. /sys/${productKey}/${deviceName}/thing/config/push
  • 设备主动请求更新配置,设备操作权限:发布
  1. /sys/${productKey}/${deviceName}/thing/config/get
  • 设备主动请求更新配置,接收云端返回的配置信息,设备操作权限:订阅:
  1. /sys/${productKey}/${deviceName}/thing/config/get_reply

固件升级相关Topic

固件升级提供系统Topic类,支持设备上报固件版本和接收升级通知。

  • 设备端上报固件版本给云端,设备操作权限:发布
  1. /ota/device/inform/${productKey}/${deviceName}
  • 设备端接收云端固件升级通知,设备操作权限:订阅
  1. /ota/device/upgrade/${productKey}/${deviceName}
  • 设备端上报固件升级进度,设备操作权限:发布
  1. /ota/device/progress/${productKey}/${deviceName}
  • 设备端请求是否固件升级,设备操作权限:发布
  1. /ota/device/request/${productKey}/${deviceName}

设备广播Topic

设备广播提供系统Topic类,但是可以自定义广播设备范围。

设备接收广播消息,设备操作权限:订阅

  1. /broadcast/${productKey}/+,Topic第三段可以自定义
本文导读目录