物联网平台中,服务端和设备端通过Topic来实现消息通信。Topic是针对设备的概念,Topic类是针对产品的概念。产品的Topic类会自动映射到产品下的所有设备中,生成用于消息通信的具体设备Topic。

产品Topic类

为了方便海量设备基于海量Topic进行通信,简化授权操作,物联网平台增加了产品Topic类的概念。Topic类是一类Topic的集合。例如,产品的自定义Topic类/${YourProductKey}/${YourDeviceName}/user/update是具体Topic/${YourProductKey}/device1/user/update/${YourProductKey}/device2/user/update的集合。

您创建设备后,产品的所有Topic类会自动映射到设备上。您无需单独为每个设备创建Topic。

图 1. Topic 自动生成示意图
Topic

关于Topic类的说明:

  • Topic类中,以正斜线(/)进行分层,区分每个类目。其中,有两个类目为既定类目:${YourProductKey}表示产品的标识符ProductKey;${YourDeviceName}表示设备名称。
  • 类目命名只能包含字母,数字和下划线(_)。每级类目不能为空。
  • 设备操作权限:发布表示设备可以往该Topic发布消息;订阅表示设备可以订阅该Topic获取消息。
  • Topic类是一个Topic模版配置,编辑更新某个Topic类后,可能对产品下所有设备使用该类Topic通信产生影响。建议在设备研发阶段设计好,设备上线后不再变更Topic类。
  • 产品Topic类的订阅操作权限是定义产品(所有设备)对此类Topic是否有发起订阅指令(SUB)的权限。 订阅(SUB)和取消订阅(UNSUB)都需由设备发起。设备发送SUB指令订阅某个Topic后,该订阅永久生效;仅在设备发起UNSUB指令取消订阅该Topic后,订阅才会被取消。

    如果您需要管控单个设备的消息收发,请在控制台的设备列表页或服务端调用DisableThing接口,禁用该设备;或在业务上管控发送给设备的消息。

设备Topic

产品的Topic类不用于通信,只是定义Topic。用于消息通信的是具体的设备Topic。

  • Topic格式和Topic类格式一致。区别在于Topic类中的变量${YourDeviceName},在Topic中是具体的设备名称。
  • 设备对应的Topic是从产品Topic类映射出来,根据设备名称而动态创建的。设备的具体Topic中带有设备名称(即DeviceName),只能被该设备用于消息通信。例如,Topic:/${YourProductKey}/device1/user/update归属于设备名为device1的设备,所以只能被设备device1用于发布或订阅消息,而不能被设备device2用于发布或订阅消息。

系统Topic和自定义Topic

物联网平台有两类Topic。

类别 说明
系统Topic

物联网平台预定义的Topic。

系统Topic包含展示在控制台产品、设备详情页下的Topic和各功能使用的Topic。具体功能使用的Topic请在对应功能的文档中查看。

例如,物模型相关的Topic一般以/sys/开头;固件升级相关的Topic以/ota/开头;设备影子的Topic以/shadow/开头。

自定义Topic 您可以根据业务需求,在产品的Topic类列表页,自定义Topic类

Topic通配符

物联网平台支持使用两种通配符。

通配符 描述
# #必须出现在Topic的最后一个类目,代表本级及下级所有类目。

例如,/a1aycMA****/device1/user/#表示设备Topic /a1aycMA****/device1/user/update/a1aycMA****/device1/user/update/error

+ 代表本级所有类目。

例如,/a1aycMA****/device1/user/+/error,表示设备Topic /a1aycMA****/device1/user/get/error/a1aycMA****/device1/user/update/error

通配符可用于以下两种场合: