两份物联网资料都列出sensor/temp/room1,看上去像是在说同一个温度主题。不过,在AWS IoT Core开发文档中,这段相同的文字并不足以确定同一个主题。官方的重要说明明确指出,主题命名空间限定在一个AWS账号和一个Region之内。[1]
这条边界有两个方向。同一个账号在不同Region使用sensor/temp/room1,属于不同主题;不同账号即使选用相同Region和相同路径,也不是同一主题。因而,主题名相同与资源身份相同是两项判断。前者比较字符串,后者还要保留服务所处的账号和地域范围。
文档先解释主题名的基本形式:它与主题过滤器都是UTF-8字符串,可以用正斜杠划分信息层级。例如sensor/temperature/room1用文字表达传感器类型与房间层次。名称和过滤器区分大小写,因此路径本身也不能任意改写。这里的层级只是命名表达,不会把不同账号的命名空间自动连成一棵共同的树。
Topic ARN进一步把这个范围写进资源名称。官方给出的形式同时包含AWS地域、账号标识和topic路径。阅读一条ARN时,末尾路径回答主题叫什么,前面的地域与账号则说明它位于哪个范围。只截取路径保存到交接表中,会删掉这两项用于区分资源的背景;反过来,仅有账号也不足以还原一个确定主题。
可以设想两份不对应真实设备的记录:甲写某账号某地域下的room1主题,乙写另一个地域下同名主题。比较结果首先是“名称相同、范围不同”,不能据此宣布两边消息已经互通,也不能认定某个订阅者应当收到另一边的消息。原页还明确说明AWS IoT Core不能在AWS账号或Region之间发送、接收消息。本篇引用这一服务边界,不提供跨账号连接或路由方案。
这对物联网连接资料的用途很具体:当两方在讨论“同一个主题”时,可以先确认他们说的是同一段路径,还是同一账号、同一Region中的资源。尚未获得这些身份信息,就保留未知,不从名称碰巧一致推定环境一致。本文没有连接设备、注册订阅或核验消息送达;采用的是AWS IoT Core公开开发文档,首次发布日期未确认,也不把该服务的命名空间规则推广为所有MQTT代理的跨云行为。
信息来源
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。