

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menunjukkan berlangganan pesan dengan Klien AWS IoT Perangkat
<a name="iot-dc-testconn-subscribe"></a>

Di bagian ini, Anda akan mendemonstrasikan dua jenis langganan pesan:
+ Langganan topik tunggal
+ Langganan topik Wild-card

Pernyataan kebijakan ini dalam kebijakan yang dibuat untuk latihan ini memberikan izin kepada Raspberry Pi untuk melakukan tindakan ini:
+ 

**`iot:Receive`**  
Memberikan izin kepada Klien AWS IoT Perangkat untuk menerima topik MQTT yang cocok dengan topik yang disebutkan dalam objek. `Resource`

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Receive"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic"
        ]
      }
  ```
+ 

**`iot:Subscribe`**  
Memberikan izin Klien AWS IoT Perangkat untuk berlangganan filter topik MQTT yang cocok dengan yang disebutkan dalam objek. `Resource`

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Subscribe"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic"
        ]
      }
  ```

## Berlangganan satu topik pesan MQTT
<a name="iot-dc-testconn-subscribe-simple-topic"></a>

Prosedur ini menunjukkan bagaimana Klien AWS IoT Perangkat dapat berlangganan dan mencatat pesan MQTT.

Di jendela terminal di komputer host lokal Anda yang terhubung ke Raspberry Pi Anda, daftar konten **\$1/dc-configs/dc-pubsub-custom-config.json** atau buka file di editor teks untuk meninjau isinya. Temukan `samples` objek, yang seharusnya terlihat seperti ini.

```
  "samples": {
    "pub-sub": {
      "enabled": true,
      "publish-topic": "test/dc/pubtopic",
      "publish-file": "~/messages/sample-ws-message.json",
      "subscribe-topic": "test/dc/subtopic",
      "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
```

Perhatikan `subscribe-topic` nilainya adalah topik MQTT tempat Klien AWS IoT Perangkat akan berlangganan saat dijalankan. Klien AWS IoT Perangkat menulis muatan pesan yang diterimanya dari langganan ini ke file yang diberi nama dalam `subscribe-file` nilai.

**Untuk berlangganan topik pesan MQTT dari Device Client AWS IoT**

1. Pastikan jendela terminal dan jendela dengan klien pengujian MQTT terlihat saat Anda melakukan prosedur ini. **Selain itu, pastikan **klien pengujian MQTT** Anda masih berlangganan filter topik \$1.** Jika tidak, berlangganan filter **\$1** topik lagi.

1. Di jendela terminal, masukkan perintah ini untuk menjalankan AWS IoT Device Client menggunakan file konfigurasi yang dibuat di[Buat file konfigurasi](iot-dc-install-configure.md#iot-dc-install-dc-configure-step1).

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json
   ```

   Di jendela terminal, Klien AWS IoT Perangkat menampilkan pesan informasi dan kesalahan apa pun yang terjadi saat dijalankan.

   Jika tidak ada kesalahan yang ditampilkan di jendela terminal, lanjutkan di AWS IoT konsol.

1. Di AWS IoT konsol, di **klien pengujian MQTT**, pilih tab **Publikasikan ke topik**.

1. Dalam **nama Topik**, masukkan **test/dc/subtopic**

1. Di **Payload pesan**, tinjau isi pesan.

1. Pilih **Publikasikan** untuk mempublikasikan pesan MQTT.

1. Di jendela terminal, perhatikan entri *pesan yang diterima* dari AWS IoT Device Client yang terlihat seperti ini.

   ```
   2021-11-10T16:02:20.890Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 45 bytes
   ```

1. Setelah Anda melihat entri *pesan yang diterima* yang menunjukkan pesan diterima, masukkan **^C** (Ctrl-C) untuk menghentikan Klien Perangkat AWS IoT .

1. Masukkan perintah ini untuk melihat akhir file log pesan dan melihat pesan yang Anda terbitkan dari klien pengujian **MQTT**.

   ```
   tail ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
   ```

Dengan melihat pesan di file log, Anda telah menunjukkan bahwa Klien AWS IoT Perangkat menerima pesan yang Anda terbitkan dari klien pengujian MQTT.

## Berlangganan beberapa topik pesan MQTT menggunakan karakter wildcard
<a name="iot-dc-testconn-subscribe-wild-topic"></a>

Prosedur ini menunjukkan bagaimana Klien AWS IoT Perangkat dapat berlangganan dan mencatat pesan MQTT menggunakan karakter wildcard. Untuk melakukan ini, Anda akan:

1. Perbarui filter topik yang digunakan Klien AWS IoT Perangkat untuk berlangganan topik MQTT.

1. Perbarui kebijakan yang digunakan oleh perangkat untuk mengizinkan langganan baru.

1. Jalankan AWS IoT Device Client dan publikasikan pesan dari konsol uji MQTT.

**Untuk membuat file konfigurasi untuk berlangganan beberapa topik pesan MQTT dengan menggunakan filter topik MQTT wildcard**

1. Di jendela terminal di komputer host lokal Anda yang terhubung ke Raspberry Pi Anda, buka **\$1/dc-configs/dc-pubsub-custom-config.json** untuk mengedit dan menemukan `samples` objek.

1. Di editor teks, cari `samples` objek dan perbarui `subscribe-topic` nilainya agar terlihat seperti ini. 

   ```
     "samples": {
       "pub-sub": {
         "enabled": true,
         "publish-topic": "test/dc/pubtopic",
         "publish-file": "~/messages/sample-ws-message.json",
         "subscribe-topic": "test/dc/#",
         "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
   ```

   `subscribe-topic`Nilai baru adalah [filter topik MQTT](topics.md#topicfilters) dengan karakter wild card MQTT di bagian akhir. Ini menjelaskan langganan ke semua topik MQTT yang dimulai dengan. `test/dc/` Klien AWS IoT Perangkat menulis muatan pesan yang diterimanya dari langganan ini ke file yang diberi nama. `subscribe-file`

1. Simpan file konfigurasi yang dimodifikasi sebagai**\$1/dc-configs/dc-pubsub-wild-config.json**, dan keluar dari editor.

**Untuk mengubah kebijakan yang digunakan oleh Raspberry Pi Anda untuk mengizinkan berlangganan dan menerima beberapa topik pesan MQTT**

1. Di jendela terminal di komputer host lokal Anda yang terhubung ke Raspberry Pi Anda, di editor teks favorit Anda, buka **\$1/policies/pubsub\$1test\$1thing\$1policy.json** untuk diedit, `iot::Subscribe` dan kemudian temukan pernyataan dan `iot::Receive` kebijakan dalam file.

1. Dalam pernyataan `iot::Subscribe` kebijakan, perbarui string di objek Resource untuk diganti `subtopic``*`, sehingga terlihat seperti ini.

   ```
       {
         "Effect": "Allow",
         "Action": [
           "iot:Subscribe"
         ],
         "Resource": [
           "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*"
         ]
       }
   ```
**catatan**  
[Karakter wild card filter topik MQTT](topics.md#topicfilters) adalah `+` (tanda plus) dan `#` (tanda pound). Permintaan berlangganan dengan `#` di akhir berlangganan semua topik yang dimulai dengan string yang mendahului `#` karakter (misalnya, `test/dc/` dalam hal ini).   
Nilai sumber daya dalam pernyataan kebijakan yang mengotorisasi langganan ini, bagaimanapun, harus menggunakan `*` (tanda bintang) sebagai pengganti `#` (tanda pound) di filter topik ARN. Ini karena prosesor kebijakan menggunakan karakter wild card yang berbeda dari yang digunakan MQTT.  
Untuk informasi selengkapnya tentang penggunaan karakter wild card untuk topik dan filter topik dalam kebijakan, lihat[Menggunakan karakter wildcard di MQTT dan kebijakan AWS IoT Core](pub-sub-policy.md#pub-sub-policy-cert).

1. Dalam pernyataan `iot::Receive` kebijakan, perbarui string di objek Resource untuk diganti `subtopic``*`, sehingga terlihat seperti ini.

   ```
       {
         "Effect": "Allow",
         "Action": [
           "iot:Receive"
         ],
         "Resource": [
           "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*"
         ]
       }
   ```

1. Simpan dokumen kebijakan yang diperbarui sebagai**\$1/policies/pubsub\$1wild\$1test\$1thing\$1policy.json**, dan keluar dari editor.

1. Masukkan perintah ini untuk memperbarui kebijakan tutorial ini untuk menggunakan definisi sumber daya baru.

   ```
   aws iot create-policy-version \
   --set-as-default \
   --policy-name "PubSubTestThingPolicy" \
   --policy-document "file://~/policies/pubsub_wild_test_thing_policy.json"
   ```

   Jika perintah berhasil, ia mengembalikan respons seperti ini. Perhatikan bahwa `policyVersionId` sekarang`2`, menunjukkan ini adalah versi kedua dari kebijakan ini. 

   Jika Anda berhasil memperbarui kebijakan, Anda dapat melanjutkan ke prosedur berikutnya.

   ```
   {
       "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy",
       "policyDocument": "{\n  \"Version\": \"2012-10-17\",		 	 	 \n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Connect\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Publish\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Subscribe\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Receive\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n      ]\n    }\n  ]\n}\n",
       "policyVersionId": "2",
       "isDefaultVersion": true
   }
   ```

   Jika Anda mendapatkan kesalahan bahwa ada terlalu banyak versi kebijakan untuk menyimpan yang baru, masukkan perintah ini untuk mencantumkan versi kebijakan saat ini. Tinjau daftar yang dikembalikan perintah ini untuk menemukan versi kebijakan yang dapat Anda hapus.

   ```
   aws iot list-policy-versions --policy-name "PubSubTestThingPolicy"
   ```

   Masukkan perintah ini untuk menghapus versi yang tidak lagi Anda butuhkan. Perhatikan bahwa Anda tidak dapat menghapus versi kebijakan default. Versi kebijakan default adalah versi dengan `isDefaultVersion` nilai`true`.

   ```
   aws iot delete-policy-version \
   --policy-name "PubSubTestThingPolicy" \
   --policy-version-id policyId
   ```

   Setelah menghapus versi kebijakan, coba lagi langkah ini.

Dengan file konfigurasi dan kebijakan yang diperbarui, Anda siap mendemonstrasikan langganan wild card dengan AWS IoT Device Client.

**Untuk mendemonstrasikan bagaimana Klien AWS IoT Perangkat berlangganan dan menerima beberapa topik pesan MQTT**

1. Di **klien uji MQTT**, periksa langganan. Jika **klien pengujian MQTT** berlangganan ke dalam filter **\$1** topik, lanjutkan ke langkah berikutnya. Jika tidak, di **klien pengujian MQTT**, di **Berlangganan ke tab topik**, di **Filter topik**, masukkan **\$1** (karakter tanda pound), lalu pilih **Berlangganan untuk berlangganan**.

1. Di jendela terminal di komputer host lokal Anda yang terhubung ke Raspberry Pi Anda, masukkan perintah ini untuk memulai AWS IoT Device Client.

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-wild-config.json
   ```

1. Saat menonton output AWS IoT Device Client di jendela terminal di komputer host lokal, kembali ke klien pengujian **MQTT**. Di tab **Publikasikan ke topik**, di **Nama topik**, masukkan**test/dc/subtopic**, lalu pilih **Publikasikan**. 

1. Di jendela terminal, konfirmasikan bahwa pesan diterima dengan mencari pesan seperti:

   ```
   2021-11-10T16:34:20.101Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 76 bytes
   ```

1. Saat menonton output AWS IoT Device Client di jendela terminal komputer host lokal, kembali ke klien pengujian **MQTT**. Di tab **Publikasikan ke topik**, di **Nama topik**, masukkan**test/dc/subtopic2**, lalu pilih **Publikasikan**. 

1. Di jendela terminal, konfirmasikan bahwa pesan diterima dengan mencari pesan seperti:

   ```
   2021-11-10T16:34:32.078Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 77 bytes
   ```

1. Setelah Anda melihat pesan yang mengonfirmasi kedua pesan diterima, masukkan **^C** (Ctrl-C) untuk menghentikan Klien Perangkat AWS IoT .

1. Masukkan perintah ini untuk melihat akhir file log pesan dan melihat pesan yang Anda terbitkan dari klien pengujian **MQTT**.

   ```
   tail -n 20 ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
   ```
**catatan**  
File log hanya berisi muatan pesan. Topik pesan tidak direkam dalam file log pesan yang diterima.  
Anda mungkin juga melihat pesan yang diterbitkan oleh Klien AWS IoT Perangkat di log yang diterima. Ini karena filter topik wild card mencakup topik pesan itu dan, terkadang, permintaan berlangganan dapat diproses oleh broker pesan sebelum pesan yang dipublikasikan dikirim ke pelanggan.

Entri dalam file log menunjukkan bahwa pesan diterima. Anda dapat mengulangi prosedur ini menggunakan nama topik lain. Semua pesan yang memiliki nama topik yang dimulai dengan `test/dc/` harus diterima dan dicatat. Pesan dengan nama topik yang dimulai dengan teks lain diabaikan.

Setelah mendemonstrasikan bagaimana Klien AWS IoT Perangkat dapat mempublikasikan dan berlangganan pesan MQTT, lanjutkan ke. [Tutorial: Menunjukkan tindakan jarak jauh (pekerjaan) dengan AWS IoT Device Client](iot-dc-runjobs.md)