

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# MQTT 主题
<a name="topics"></a>

MQTT 主题用于标识 Amazon IoT 消息。 Amazon IoT 客户通过提供消息主题名称来识别他们发布的消息。客户端通过将主题筛选条件注册到 Amazon IoT Core来标识要订阅（接收）的消息。消息代理使用主题名称和主题筛选条件将消息从发布客户端传输到订阅客户端。

消息代理使用主题来识别使用 MQTT 发送的消息以及使用 HTTP 发送到 [HTTPS 消息 URL](http.md#httpurl) 的消息。

虽然 Amazon IoT 支持一些[保留的系统主题](reserved-topics.md)，但大多数 MQTT 主题是由您（即系统设计者）创建和管理的。 Amazon IoT 使用主题来识别从发布客户端收到的消息，并选择要发送给订阅客户端的消息，如以下各节所述。在为系统创建主题命名空间之前，请查看 MQTT 主题的特征，以创建最适合您的物联网系统的主题名称层次结构。

## 主题名称
<a name="topicnames"></a>

主题名称和主题筛选条件是 UTF-8 编码的字符串。它们可以使用正斜杠 (/) 字符分隔层次结构的级别来表示信息的层次结构。例如，此主题名称可以引用房间 1 中的温度传感器：
+ `sensor/temperature/room1`

在此示例中，其他房间中可能还有其它类型的传感器，其主题名称如下：
+ `sensor/temperature/room2`
+ `sensor/humidity/room1`
+ `sensor/humidity/room2`

**注意**  
在考虑系统中消息的主题名称时，请记住：  
主题名称和主题筛选条件区分大小写。
主题名称不得包含个人身份信息。
以 \$1 开头的主题名称均为只能由 Amazon IoT Core使用的[预留主题](reserved-topics.md)。
Amazon IoT Core 无法在 Amazon Web Services 账户 s 或地区之间发送或接收消息。

有关设计主题名称和命名空间的更多信息，请参阅我们的白皮书《[为 Amazon IoT Core Core 设计 MQTT 主题](https://docs.amazonaws.cn/whitepapers/latest/designing-mqtt-topics-aws-iot-core/designing-mqtt-topics-aws-iot-core.html)》。

有关应用程序如何发布和订阅消息的示例，请从 [Amazon IoT Core 教程入门](iot-gs.md) 和 [Amazon IoT Device SDK、Mobile SDK 和 Amazon IoT Device Client](iot-sdks.md) 开始查阅。

**重要**  
主题命名空间仅限于 Amazon Web Services 账户 和区域。例如，一个区域 Amazon Web Services 账户 中某人使用的`sensor/temp/room1`主题与另一个区域的同一个 Amazon 账户使用的`sensor/temp/room1`主题或任何其他区域中任何其他 Amazon Web Services 账户 账户使用的主题不同。

## 主题 ARN
<a name="topicnames-arn"></a>

所有主题 ARNs （Amazon 资源名称）的格式如下：

```
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。

## 主题名称筛选条件
<a name="topicfilters"></a>

订阅客户端会向消息代理注册主题名称筛选条件，以指定消息代理应将消息发送到的主题。主题名称筛选条件可以是用于订阅单个主题的单个主题名称，也可以包含通配符以同时订阅多个主题名称。

发布客户端无法在其发布的主题名称中使用通配符。

下表列出了可在主题筛选条件中使用的通配符。


**主题通配符**  

| 通配符 | Matches | 注意 | 
| --- | --- | --- | 
| \$1 | 主题层次结构中位于其级别及其以下的所有字符串。 |  必须是主题筛选条件中的最后一个字符。 必须是其主题层次结构级别中的唯一字符。 可以在还包含 \$1 通配符的主题筛选条件中使用。  | 
| \$1 | 级别中包含字符的任何字符串。 |  必须是其主题层次结构级别中的唯一字符。 可在主题筛选条件的多个级别中使用。  | 

将通配符用于之前的传感器主题名称示例：
+ `sensor/#` 订阅接收发布到 `sensor/`、`sensor/temperature` 和 `sensor/temperature/room1` 的消息，但不会接收发布到 `sensor` 的消息。
+ `sensor/+/room1` 订阅接收发布到 `sensor/temperature/room1` 和 `sensor/humidity/room1` 的消息，但不会接收发布到 `sensor/temperature/room2` 或 `sensor/humidity/room2` 的消息。

### 主题筛选条件 ARN
<a name="topicfilters-arn"></a>

所有主题筛选条件 ARNs （Amazon 资源名称）均采用以下格式：

```
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。