本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
MQTT 主题
MQTT 主题将标识 Amazon IoT 消息。Amazon IoT 客户端通过向消息提供主题名称来标识其发布的消息。客户端通过将主题筛选条件注册到 Amazon IoT Core 来标识要订阅(接收)的消息。消息代理使用主题名称和主题筛选条件将消息从发布客户端传输到订阅客户端。
消息代理使用主题来识别使用 MQTT 发送的消息以及使用 HTTP 发送到 HTTPS 消息 URL 的消息。
虽然 Amazon IoT 支持某些保留的系统主题,但大多数 MQTT 主题是由您(即系统设计人员)创建和管理的。Amazon IoT 使用主题识别从发布客户端接收的消息,并选择要发送到订阅客户端的消息,如以下各节所述。在为系统创建主题命名空间之前,请查看 MQTT 主题的特征,以创建最适合您的 IoT 系统的主题名称层次结构。
主题名称
主题名称和主题筛选条件是 UTF-8 编码的字符串。它们可以使用正斜杠 (/) 字符分隔层次结构的级别来表示信息的层次结构。例如,此主题名称可以引用房间 1 中的温度传感器:
-
sensor/temperature/room1
在此示例中,其他房间中可能还有其它类型的传感器,其主题名称如下:
-
sensor/temperature/room2
-
sensor/humidity/room1
-
sensor/humidity/room2
注意
在考虑系统中消息的主题名称时,请记住:
-
主题名称和主题筛选条件区分大小写。
-
主题名称不得包含个人身份信息。
-
以 $ 开头的主题名称均为只能由 Amazon IoT Core 使用的预留主题。
-
Amazon IoT Core 无法在Amazon Web Services 账户或区域之间发送或接收消息。
有关设计主题名称和命名空间的更多信息,请参阅我们的白皮书《为 Amazon IoT Core Core 设计 MQTT 主题》。
有关应用程序如何发布和订阅消息的示例,请从 Amazon IoT Core 入门 和 Amazon IoT Device SDK、Mobile SDK 和 Amazon IoT Device Client 开始查阅。
重要
主题命名空间仅限于Amazon Web Services 账户和区域。例如,一个区域中的某个Amazon Web Services 账户使用的 sensor/temp/room1
主题与另一个区域中的同一Amazon账户或任何区域中的任何其它 Amazon Web Services 账户 使用的 sensor/temp/room1
主题不同。
主题 ARN
所有主题 ARN (Amazon Resource Name) 都采用以下形式:
arn:aws:iot:
aws-region
:AWS-account-ID
:topic/Topic
例如,arn:aws:iot:us-west-2:123EXAMPLE456:topic/application/topic/device/sensor
是主题 application/topic/device/sensor
的 ARN。
主题筛选条件
订阅客户端会向消息代理注册主题筛选条件,以指定消息代理应将消息发送到的主题。主题筛选条件可以是用于订阅单个主题的单个主题名称,也可以包含通配符以同时订阅多个主题名称。
发布客户端无法在其发布的主题名称中使用通配符。
下表列出了可在主题筛选条件中使用的通配符。
主题通配符 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
通配符 | 匹配项 | 注意 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# | 主题层次结构中位于其级别及其以下的所有字符串。 |
必须是主题筛选条件中的最后一个字符。 必须是其主题层次结构级别中的唯一字符。 可以在还包含 + 通配符的主题筛选条件中使用。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+ | 级别中包含字符的任何字符串。 |
必须是其主题层次结构级别中的唯一字符。 可在主题筛选条件的多个级别中使用。 |
将通配符用于之前的传感器主题名称示例:
-
sensor/#
订阅接收发布到sensor/
、sensor/temperature
和sensor/temperature/room1
的消息,但不会接收发布到sensor
的消息。 -
sensor/+/room1
订阅接收发布到sensor/temperature/room1
和sensor/humidity/room1
的消息,但不会接收发布到sensor/temperature/room2
或sensor/humidity/room2
的消息。
主题筛选条件 ARN
所有主题筛选条件 ARN (Amazon Resource Name) 都采用以下形式:
arn:aws:iot:
aws-region
:AWS-account-ID
:topicfilter/TopicFilter
例如,arn:aws:iot:us-west-2:123EXAMPLE456:topicfilter/application/topic/+/sensor
是主题筛选条件 application/topic/+/sensor
的 ARN。