

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

MQTT 主題識別 AWS IoT message. AWS IoT clients 透過提供訊息主題名稱來識別他們發佈的訊息。用戶端能透過用 AWS IoT Core註冊主題篩選條件，來識別想要訂閱 (接收) 的簡訊。訊息代理程式使用主題名稱和主題篩選條件，將訊息從發佈用戶端路由至訂閱用戶端。

訊息代理程式會使用主題來識別使用 MQTT 傳送和使用 HTTP 傳送至 [HTTPS 訊息 URL](http.md#httpurl) 的訊息

雖然 AWS IoT 支援某些[預留系統主題](reserved-topics.md)，但大多數 MQTT 主題都是由您建立和管理，System designer. AWS IoT uses 主題可用來識別從發佈用戶端接收的訊息，並選取要傳送給訂閱用戶端的訊息，如以下章節所述。為您的系統建立主題命名空間之前，請檢閱 MQTT 主題的特性，以建立最適合您 IoT 系統的主題名稱階層。

## 主題名稱
<a name="topicnames"></a>

主題名稱和主題篩選條件均為 UTF-8 編碼的字串。它們可以使用正斜線 (/) 字元來表示資訊層級，以分離層次的層級。例如，本主題名稱會提及房間 1 中的溫度感應器：
+ `sensor/temperature/room1`

在此範例中，其他房間中可能也有其他類型的感應器，例如主題名稱為：
+ `sensor/temperature/room2`
+ `sensor/humidity/room1`
+ `sensor/humidity/room2`

**注意**  
考慮系統中的訊息主題名稱時，請謹記：  
主題名稱和主題篩選條件會區分大小寫。
主題名稱不得包含個人識別資訊。
以 $ 開頭的主題名稱為僅由 AWS IoT Core使用的[預留主題](reserved-topics.md)。
AWS IoT Core 無法在 AWS 帳戶或 區域之間傳送或接收訊息。

如需有關設計主題名稱和命名空間的詳細資訊，請參閱我們的白皮書，[針對 AWS IoT Core設計 MQTT 主題](https://docs.aws.amazon.com/whitepapers/latest/designing-mqtt-topics-aws-iot-core/designing-mqtt-topics-aws-iot-core.html)。

如需應用程式如何發佈和訂閱訊息的範例，請從 [AWS IoT Core 教學課程入門](iot-gs.md) 和 [AWS IoT 裝置SDKs、行動SDKs和 AWS IoT 裝置用戶端](iot-sdks.md) 開始。

**重要**  
主題命名空間僅限於 AWS 帳戶 和 區域。例如， AWS 帳戶 一個區域中的 所使用的`sensor/temp/room1`主題與另一個區域中相同 AWS 帳戶所使用的主題，或任何 AWS 帳戶 區域中的任何其他帳戶所使用的`sensor/temp/room1`主題不同。

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

所有主題 ARN (Amazon Resource Names) 都具有以下形式：

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

訂閱用戶端向訊息中介裝置註冊主題名稱篩選條件，以指定訊息中介裝置應傳送給他們的訊息主題。主題名稱篩選條件可以是單一主題名稱來訂閱單一主題名稱，也可以包含萬用字元來同時訂閱多個主題名稱。

發佈用戶端無法在其發佈的主題名稱中使用萬用字元。

以下表格列出可用於主題篩選條件的萬用字元。


**主題萬用字元**  

| 萬用字元 | 相符 | 備註 | 
| --- | --- | --- | 
| \# | 位於主題階層中及低於其層級的所有字串。 | 必須是主題篩選條件中的最後一個字元。<br />必須是其主題階層的層級中唯一的字元。<br />可以在也包含 \+ 萬用字元的主題篩選條件中使用。 | 
| \+ | 包含該字元的層級中的任何字串。 | 必須是其主題階層的層級中唯一的字元。<br />可以在主題篩選條件的多個層級中使用。 | 

對上一個感應器主題名稱範例使用萬用字元：
+ 訂閱 `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>

所有主題篩選條件 ARN (Amazon Resource Names) 都具有以下形式：

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