

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

# Protokol komunikasi perangkat
<a name="protocols"></a><a name="iot-message-broker"></a>

AWS IoT Core mendukung perangkat dan klien yang menggunakan protokol MQTT dan MQTT over WebSocket Secure (WSS) untuk mempublikasikan dan berlangganan pesan, serta perangkat dan klien yang menggunakan protokol HTTPS untuk mempublikasikan pesan. Semua protokol mendukung IPv4 dan IPv6 Bagian ini menjelaskan opsi koneksi yang berbeda untuk perangkat dan klien.

## Versi protokol TLS
<a name="connection-protocol-tls"></a>

AWS IoT Core menggunakan [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) [versi 1.2](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.2) dan [TLS versi 1.3](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.3) untuk mengenkripsi semua komunikasi. Anda dapat mengonfigurasi versi kebijakan TLS tambahan untuk titik akhir Anda dengan [mengonfigurasi setelan TLS](https://docs.aws.amazon.com//iot/latest/developerguide/iot-endpoints-tls-config.html) dalam konfigurasi domain. [Saat menghubungkan perangkat ke AWS IoT Core, klien dapat mengirim [ekstensi Server Name Indication (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1), yang diperlukan untuk fitur seperti [pendaftaran multi-akun](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html#multiple-account-cert), [endpoint yang dapat dikonfigurasi, [domain khusus](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html), dan titik akhir](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html) VPC.](https://docs.aws.amazon.com//iot/latest/developerguide/IoTCore-VPC.html) Untuk informasi selengkapnya, lihat [Keamanan Transportasi di AWS IoT](transport-security.html).

[AWS IoT Perangkat SDKs](iot-connect-devices.md#iot-connect-device-sdks)Dukungan MQTT dan MQTT melalui WSS dan mendukung persyaratan keamanan koneksi klien. Kami merekomendasikan menggunakan [AWS IoT Perangkat SDKs](iot-connect-devices.md#iot-connect-device-sdks) untuk menghubungkan klien ke AWS IoT.

## Protokol, pemetaan port, dan otentikasi
<a name="protocol-mapping"></a><a name="protocol-port-mapping"></a>

Bagaimana perangkat atau klien terhubung ke broker pesan dapat dikonfigurasi menggunakan jenis [otentikasi.](#connection-protocol-auth-mode) Secara default atau ketika tidak ada ekstensi SNI yang dikirim, metode otentikasi didasarkan pada protokol aplikasi, port, dan ekstensi TLS Application Layer Protocol Negotiation (ALPN) yang digunakan perangkat. Tabel berikut mencantumkan otentikasi yang diharapkan berdasarkan port, port, dan ALPN.


**Protokol, otentikasi, dan pemetaan port**  

| Protokol | Operasi yang didukung | Autentikasi | Port | Nama protokol ALPN | 
| --- | --- | --- | --- | --- | 
|  MQTT lebih WebSocket  | Publikasikan, Berlangganan | Tanda Tangan Versi 4 | 443 |  N/A  | 
|  MQTT lebih WebSocket  | Publikasikan, Berlangganan | Autentikasi kustom | 443 |  N/A  | 
|  MQTT  | Publikasikan, Berlangganan |  Sertifikat klien X.509  |  443 †  |  `x-amzn-mqtt-ca`  | 
| MQTT | Publikasikan, Berlangganan | Sertifikat klien X.509 | 8883 | N/A | 
|  MQTT  | Publikasikan, Berlangganan |  Autentikasi kustom  |  443 †  |  `mqtt`  | 
|  HTTPS  | Publikasikan saja |  Tanda Tangan Versi 4  |  443  |  N/A  | 
|  HTTPS  | Publikasikan saja |  Sertifikat klien X.509  |  443 †  |  `x-amzn-http-ca`  | 
| HTTPS | Publikasikan saja | Sertifikat klien X.509 | 8443 | N/A | 
| HTTPS | Publikasikan saja | Autentikasi kustom | 443 | N/A | 

**Negosiasi Protokol Lapisan Aplikasi (ALPN)**  
† Saat menggunakan konfigurasi endpoint default, klien yang terhubung pada port 443 dengan otentikasi sertifikat klien X.509 harus menerapkan ekstensi TLS [Application Layer Protocol Negotiation (ALPN)](https://tools.ietf.org/html/rfc7301) dan menggunakan [nama protokol ALPN yang tercantum dalam ALPN](https://tools.ietf.org/html/rfc7301#section-3.1) yang dikirim oleh klien sebagai bagian dari pesan. ProtocolNameList `ClientHello`  
[Pada port 443, titik akhir [IoT:Data-ATS](iot-connect-devices.md#iot-connect-device-endpoint-table) mendukung ALPN x-amzn-http-ca HTTP, tetapi titik akhir IoT:Jobs tidak.](iot-connect-devices.md#iot-connect-device-endpoint-table)  
[Pada port 8443 HTTPS dan port 443 MQTT dengan ALPN x-amzn-mqtt-ca, otentikasi khusus tidak dapat digunakan.](custom-authentication.md)

Klien terhubung ke titik akhir perangkat mereka Akun AWS. Lihat [AWS IoT data perangkat dan titik akhir layanan](iot-connect-devices.md#iot-connect-device-endpoints) untuk informasi tentang cara menemukan titik akhir perangkat akun Anda.

**catatan**  
AWS SDKs tidak memerlukan seluruh URL. Mereka hanya memerlukan nama host endpoint seperti [`pubsub.py`contoh untuk AWS IoT Device SDK for Python](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/master/samples/pubsub.py#L100) on. GitHub Melewati seluruh URL seperti yang disediakan dalam tabel berikut dapat menghasilkan kesalahan seperti nama host yang tidak valid.


**Menghubungkan ke AWS IoT Core**  

|  Protokol  |  Titik akhir atau URL  | 
| --- | --- | 
|  MQTT  |  `iot-endpoint`  | 
|  MQTT melalui WSS  |  `wss://iot-endpoint/mqtt`  | 
|  HTTPS  |  `https://iot-endpoint/topics`  | 

## Memilih protokol aplikasi untuk komunikasi perangkat Anda
<a name="protocol-selection"></a>

Untuk sebagian besar komunikasi perangkat IoT melalui titik akhir perangkat, Anda akan ingin menggunakan protokol Secure MQTT atau MQTT over WebSocket Secure (WSS); namun, titik akhir perangkat juga mendukung HTTPS.

Tabel berikut membandingkan bagaimana AWS IoT Core menggunakan dua protokol tingkat tinggi (MQTT dan HTTPS) untuk komunikasi perangkat.


**AWS IoT protokol perangkat (MQTT dan HTTPS) side-by-side**  

|  Fitur  |  [MQTT](mqtt.md)  |  [HTTPS](http.md)  | 
| --- | --- | --- | 
|  Publikasi/Berlangganan dukungan  |  Publikasikan dan berlangganan  |  Publikasikan saja  | 
|  Dukungan SDK  |  [AWS Perangkat SDKs](iot-connect-devices.md#iot-connect-device-sdks) mendukung protokol MQTT dan WSS  |  Tidak ada dukungan SDK, tetapi Anda dapat menggunakan metode khusus bahasa untuk membuat permintaan HTTPS  | 
|  Dukungan Kualitas Layanan  |  [MQTT QoS level 0 dan 1](mqtt.md#mqtt-qos)  | QoS didukung dengan melewatkan parameter string kueri ?qos=qos di mana nilainya bisa 0 atau 1. Anda dapat menambahkan string kueri ini untuk mempublikasikan pesan dengan nilai QoS yang Anda inginkan. | 
| Dapat menerima pesan yang terlewatkan saat perangkat sedang offline | Ya | Tidak | 
|  `clientId`dukungan lapangan  |  Ya  |  Tidak  | 
|  Deteksi pemutusan perangkat  |  Ya  |  Tidak  | 
|  Komunikasi yang aman  |  Ya. Lihat [Protokol, pemetaan port, dan otentikasi](#protocol-mapping)  |  Ya. Lihat [Protokol, pemetaan port, dan otentikasi](#protocol-mapping)  | 
|  Definisi topik  |  Aplikasi didefinisikan  |  Aplikasi didefinisikan  | 
|  Format data pesan  |  Aplikasi didefinisikan  |  Aplikasi didefinisikan  | 
| Protokol overhead | Lebih rendah | Lebih tinggi | 
| Konsumsi daya | Lebih rendah | Lebih tinggi | 

## Memilih jenis otentikasi untuk komunikasi perangkat Anda
<a name="connection-protocol-auth-mode"></a>

Anda dapat mengonfigurasi jenis otentikasi untuk titik akhir IoT Anda menggunakan titik akhir yang dapat dikonfigurasi. Atau, gunakan konfigurasi default dan tentukan bagaimana perangkat Anda mengautentikasi dengan protokol aplikasi, port, dan kombinasi ekstensi ALPN TLS. Jenis otentikasi yang Anda pilih menentukan bagaimana perangkat Anda akan mengautentikasi saat menghubungkan ke. AWS IoT Core Ada lima jenis otentikasi: 

**Sertifikat X.509**

Otentikasi perangkat menggunakan [sertifikat klien X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html), yang AWS IoT Core memvalidasi untuk mengautentikasi perangkat. Jenis otentikasi ini bekerja dengan protokol Secure MQTT (MQTT over TLS) dan HTTPS.

**Sertifikat X.509 dengan otorisasi khusus**

Otentikasi perangkat menggunakan [sertifikat klien X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) dan melakukan tindakan otentikasi tambahan menggunakan [otorisasi khusus](https://docs.aws.amazon.com//iot/latest/developerguide/config-custom-auth.html), yang akan menerima informasi sertifikat klien X.509. Jenis otentikasi ini bekerja dengan protokol Secure MQTT (MQTT over TLS) dan HTTPS. Jenis otentikasi ini hanya dimungkinkan menggunakan titik akhir yang dapat dikonfigurasi dengan otentikasi kustom X.509. Tidak ada opsi ALPN.

**AWS Tanda Tangan Versi 4 (SiGv4)**

Mengautentikasi perangkat menggunakan Cognito atau layanan backend Anda, mendukung federasi sosial dan perusahaan. Jenis otentikasi ini bekerja dengan protokol MQTT over WebSocket Secure (WSS) dan HTTPS.

**Authorizer kustom**

Mengautentikasi perangkat dengan mengonfigurasi fungsi Lambda untuk memproses informasi otentikasi kustom yang dikirim ke. AWS IoT Core Jenis otentikasi ini bekerja dengan protokol Secure MQTT (MQTT over TLS), HTTPS, dan MQTT over Secure (WSS). WebSocket 

**Default**

Otentikasi perangkat berdasarkan ekstensi port and/or application layer protocol negotiation (ALPN) yang digunakan perangkat. Beberapa opsi otentikasi tambahan tidak didukung. Untuk informasi selengkapnya, lihat [Protokol, pemetaan port, dan otentikasi](#protocol-mapping).

Tabel di bawah ini menunjukkan semua kombinasi yang didukung dari jenis otentikasi dan protokol aplikasi.


**Kombinasi yang didukung dari jenis otentikasi dan protokol aplikasi**  

| Jenis autentikasi | MQTT aman (MQTT melalui TLS) | MQTT lebih WebSocket Aman (WSS) | HTTPS | Default | 
| --- | --- | --- | --- | --- | 
| Sertifikat X.509 | ✓ |  | ✓ |  | 
| Sertifikat X.509 dengan otorisasi khusus | ✓ |  | ✓ |  | 
| AWS Tanda Tangan Versi 4 (SiGv4) |  | ✓ | ✓ |  | 
| Authorizer kustom | ✓ | ✓ | ✓ |  | 
| Default |  |  |  | ✓ | 

## Batas durasi koneksi
<a name="connection-duration"></a>

Koneksi HTTPS tidak dijamin bertahan lebih lama dari waktu yang diperlukan untuk menerima dan menanggapi permintaan.

Durasi koneksi MQTT tergantung pada fitur otentikasi yang Anda gunakan. Tabel berikut mencantumkan durasi koneksi maksimum dalam kondisi ideal untuk setiap fitur.


**Durasi koneksi MQTT dengan fitur otentikasi**  

|  Fitur  |  Durasi maksimum\$1  | 
| --- | --- | 
|  Sertifikat klien X.509  |  1—2 minggu  | 
|  Autentikasi kustom  |  1—2 minggu  | 
|  Tanda Tangan Versi 4  |  Hingga 24 jam  | 

\$1 Tidak dijamin

Dengan sertifikat X.509 dan otentikasi khusus, durasi koneksi tidak memiliki batas keras, tetapi bisa sesingkat beberapa menit. Gangguan koneksi dapat terjadi karena berbagai alasan. Daftar berikut berisi beberapa alasan paling umum.
+ Gangguan ketersediaan Wi-Fi
+ Gangguan koneksi penyedia layanan Internet (ISP)
+ Patch layanan
+ Deployment Layanan
+ Penskalaan otomatis layanan
+ Host layanan tidak tersedia
+ Masalah dan pembaruan penyeimbang beban
+ Kesalahan sisi klien

Perangkat Anda harus menerapkan strategi untuk mendeteksi pemutusan dan penyambungan kembali. Untuk informasi tentang peristiwa pemutusan sambungan dan panduan tentang cara menanganinya, lihat [Hubungkan/Putuskan acara](life-cycle-events.md#connect-disconnect) di[Peristiwa siklus hidup](life-cycle-events.md).

# MQTT
<a name="mqtt"></a>

[MQTT](http://mqtt.org/) (Message Queuing Telemetry Transport) adalah protokol pesan ringan dan diadopsi secara luas yang dirancang untuk perangkat terbatas. AWS IoT Core dukungan untuk MQTT didasarkan pada spesifikasi MQTT [v3.1.1 dan spesifikasi MQTT v5.0](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html), dengan beberapa perbedaan, seperti yang [didokumentasikan](http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html) dalam. [AWS IoT perbedaan dari spesifikasi MQTT](#mqtt-differences) Sebagai versi terbaru dari standar, MQTT 5 memperkenalkan beberapa fitur utama yang membuat sistem berbasis MQTT lebih kuat, termasuk peningkatan skalabilitas baru, pelaporan kesalahan yang ditingkatkan dengan respons kode alasan, pengatur waktu kedaluwarsa pesan dan sesi, dan header pesan pengguna khusus. Untuk informasi selengkapnya tentang fitur MQTT 5 yang AWS IoT Core mendukung, lihat fitur yang didukung [MQTT](#mqtt5) 5. AWS IoT Core juga mendukung komunikasi lintas versi MQTT (MQTT 3 dan MQTT 5). Penerbit MQTT 3 dapat mengirim pesan MQTT 3 ke pelanggan MQTT 5 yang akan menerima pesan publikasi MQTT 5, dan sebaliknya.

 AWS IoT Core *mendukung koneksi perangkat yang menggunakan protokol MQTT dan MQTT melalui protokol WSS dan yang diidentifikasi oleh ID klien.* [AWS IoT Perangkat SDKs](iot-connect-devices.md#iot-connect-device-sdks)Dukungan kedua protokol dan merupakan cara yang disarankan untuk menghubungkan perangkat ke. AWS IoT Core AWS IoT Perangkat SDKs mendukung fungsi yang diperlukan untuk perangkat dan klien untuk terhubung dan mengakses AWS IoT layanan. Perangkat SDKs mendukung protokol otentikasi yang diperlukan AWS IoT layanan dan persyaratan ID koneksi yang diperlukan oleh protokol MQTT dan MQTT melalui protokol WSS. Untuk informasi tentang cara menyambung AWS IoT menggunakan AWS Perangkat SDKs dan menautkan ke contoh AWS IoT dalam bahasa yang didukung, lihat[Menghubungkan dengan MQTT menggunakan Perangkat AWS IoT SDKs](#mqtt-sdk). Untuk informasi selengkapnya tentang metode otentikasi dan pemetaan port untuk pesan MQTT, lihat. [Protokol, pemetaan port, dan otentikasi](protocols.md#protocol-mapping)

Meskipun kami merekomendasikan penggunaan AWS IoT Perangkat SDKs untuk terhubung AWS IoT, mereka tidak diperlukan. Namun SDKs, jika Anda tidak menggunakan AWS IoT Perangkat, Anda harus menyediakan koneksi dan keamanan komunikasi yang diperlukan. Klien harus mengirimkan [ekstensi TLS Server Name Indication (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1) dalam permintaan koneksi. Upaya koneksi yang tidak termasuk SNI ditolak. Untuk informasi selengkapnya, lihat [Keamanan Transportasi di AWS IoT](transport-security.html). Klien yang menggunakan pengguna IAM dan AWS kredensialnya untuk mengautentikasi klien harus memberikan otentikasi [Signature](https://docs.aws.amazon.com//general/latest/gr/signature-version-4.html) Version 4 yang benar.

Setelah klien Anda terhubung, Anda dapat memantau dan mengelola koneksi klien MQTT mereka menggunakan. APIs Untuk informasi selengkapnya, lihat [Mengelola koneksi MQTT](#mqtt-client-disconnect).

**Topics**
+ [

## Menghubungkan dengan MQTT menggunakan Perangkat AWS IoT SDKs
](#mqtt-sdk)
+ [

## Opsi Kualitas Layanan (QoS) MQTT
](#mqtt-qos)
+ [

## Sesi persisten MQTT
](#mqtt-persistent-sessions)
+ [

## Pesan yang dipertahankan MQTT
](#mqtt-retain)
+ [

## Pesan Last Will and Testament (LWT) MQTT
](#mqtt-lwt)
+ [

## Menggunakan ConnectAttributes
](#connect-attribute)
+ [

## Fitur yang didukung MQTT 5
](#mqtt5)
+ [

## Properti MQTT 5
](#mqtt5-properties)
+ [

## Kode alasan MQTT
](#mqtt5-reason-codes)
+ [

## AWS IoT perbedaan dari spesifikasi MQTT
](#mqtt-differences)
+ [

## Mengelola koneksi MQTT
](#mqtt-client-disconnect)

## Menghubungkan dengan MQTT menggunakan Perangkat AWS IoT SDKs
<a name="mqtt-sdk"></a>

Bagian ini berisi tautan ke AWS IoT Perangkat SDKs dan ke kode sumber program contoh yang menggambarkan cara menghubungkan perangkat. AWS IoT Contoh aplikasi yang ditautkan di sini menunjukkan cara terhubung AWS IoT menggunakan protokol MQTT dan MQTT melalui WSS.

**catatan**  
 AWS IoT Perangkat SDKs telah merilis klien MQTT 5.

------
#### [ C\$1\$1 ]

**Menggunakan SDK Perangkat AWS IoT C \$1\$1 untuk menghubungkan perangkat**
+  [Kode sumber aplikasi contoh yang menunjukkan contoh koneksi MQTT di C \$1\$1](https://github.com/aws/aws-iot-device-sdk-cpp-v2/blob/main/samples/mqtt/basic_connect/main.cpp) 
+ [AWS IoT Perangkat SDK for C\$1\$1 v2 aktif GitHub](https://github.com/aws/aws-iot-device-sdk-cpp-v2)

------
#### [ Python ]

**Menggunakan AWS IoT Device SDK untuk Python untuk menghubungkan perangkat**
+  [Kode sumber aplikasi contoh yang menunjukkan contoh koneksi MQTT dengan Python](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/master/samples/pubsub.py) 
+ [AWS IoT Perangkat SDK v2 untuk Python aktif GitHub](https://github.com/aws/aws-iot-device-sdk-python-v2)

------
#### [ JavaScript ]

**Menggunakan AWS IoT Device SDK JavaScript untuk menghubungkan perangkat**
+  [Kode sumber aplikasi contoh yang menunjukkan contoh koneksi MQTT di JavaScript](https://github.com/aws/aws-iot-device-sdk-js-v2/blob/master/samples/node/pub_sub/index.ts) 
+ [AWS IoT SDK perangkat untuk JavaScript v2 aktif GitHub](https://github.com/aws/aws-iot-device-sdk-js-v2)

------
#### [ Java ]

**Menggunakan AWS IoT Device SDK for Java untuk menghubungkan perangkat**

**catatan**  
 AWS IoT Device SDK for Java v2 sekarang mendukung pengembangan Android. Untuk informasi selengkapnya, lihat [SDK AWS IoT perangkat untuk Android](https://github.com/aws/aws-iot-device-sdk-java-v2/blob/main/documents/ANDROID.md).
+  [Kode sumber aplikasi contoh yang menunjukkan contoh koneksi MQTT di Java](https://github.com/aws/aws-iot-device-sdk-java-v2/blob/master/samples/BasicPubSub/src/main/java/pubsub/PubSub.java) 
+ [AWS IoT Perangkat SDK for Java v2 aktif GitHub](https://github.com/aws/aws-iot-device-sdk-java-v2)

------
#### [ Embedded C ]

**Menggunakan AWS IoT Device SDK untuk Embedded C untuk menghubungkan perangkat**

**penting**  
SDK ini dimaksudkan untuk digunakan oleh pengembang perangkat lunak tertanam yang berpengalaman.
+  [Kode sumber aplikasi contoh yang menunjukkan contoh koneksi MQTT di Embedded C](https://github.com/aws/aws-iot-device-sdk-embedded-C/blob/master/demos/mqtt/mqtt_demo_basic_tls/mqtt_demo_basic_tls.c) 
+ [AWS IoT Perangkat SDK untuk Embedded C aktif GitHub](https://github.com/aws/aws-iot-device-sdk-embedded-C)

------

## Opsi Kualitas Layanan (QoS) MQTT
<a name="mqtt-qos"></a>

AWS IoT dan AWS IoT Perangkat SDKs mendukung tingkat [MQTT Quality of Service (QoS](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc385349263)) dan. `0` `1` Protokol MQTT mendefinisikan tingkat ketiga QoS, level`2`, tetapi tidak mendukungnya. AWS IoT Hanya protokol MQTT yang mendukung fitur QoS. HTTPS mendukung QoS dengan meneruskan parameter string kueri `?qos=qos` di mana nilainya bisa 0 atau 1.

Tabel ini menjelaskan bagaimana setiap level QoS memengaruhi pesan yang dipublikasikan ke dan oleh broker pesan. 


|  Dengan tingkat QoS...  |  Pesannya adalah...  |  Komentar  | 
| --- | --- | --- | 
|  QoS tingkat 0  |  Dikirim nol atau lebih kali  |  Level ini harus digunakan untuk pesan yang dikirim melalui tautan komunikasi yang andal atau yang dapat dilewatkan tanpa masalah.  | 
|  QoS tingkat 1  |  Dikirim setidaknya satu kali, dan kemudian berulang kali sampai `PUBACK` tanggapan diterima  |  Pesan tidak dianggap lengkap sampai pengirim menerima `PUBACK` tanggapan untuk menunjukkan pengiriman yang berhasil.  | 

## Sesi persisten MQTT
<a name="mqtt-persistent-sessions"></a>

Sesi persisten menyimpan langganan dan pesan klien, dengan Quality of Service (QoS) 1, yang belum diakui oleh klien. Ketika perangkat terhubung kembali ke sesi persisten, sesi dilanjutkan, langganan dipulihkan, dan pesan berlangganan yang tidak diakui diterima dan disimpan sebelum koneksi ulang dikirim ke klien.

Pemrosesan pesan yang disimpan direkam dalam CloudWatch metrik dan CloudWatch Log. Untuk informasi tentang entri yang ditulis ke CloudWatch dan CloudWatch Log, lihat [Metrik broker pesan](metrics_dimensions.md#message-broker-metrics) dan[Entri log antrian](cwl-format.md#log-mb-queued).

### Membuat sesi persisten
<a name="mqtt-persistent-sessions-create"></a>

Di MQTT 3, Anda membuat sesi persisten MQTT dengan mengirim `CONNECT` pesan dan menyetel flag ke. `cleanSession` `0` Jika tidak ada sesi untuk klien yang mengirim `CONNECT` pesan, sesi persisten baru akan dibuat. Jika sesi sudah ada untuk klien, klien melanjutkan sesi yang ada. Untuk membuat sesi bersih, Anda mengirim `CONNECT` pesan dan mengatur `cleanSession` bendera ke`1`, dan broker tidak akan menyimpan status sesi apa pun saat klien terputus.

Di MQTT 5, Anda menangani sesi persisten dengan menyetel bendera dan`Clean Start`. `Session Expiry Interval` Clean Start mengontrol awal sesi penghubung dan akhir sesi sebelumnya. Ketika Anda menetapkan `Clean Start` =`1`, sesi baru dibuat dan sesi sebelumnya dihentikan jika ada. Saat Anda mengatur `Clean Start` =`0`, sesi penghubung melanjutkan sesi sebelumnya jika ada. Interval Kedaluwarsa Sesi mengontrol akhir sesi penghubung. Session Expiry Interval menentukan waktu, dalam detik (4-byte integer), bahwa sesi akan bertahan setelah terputus. Pengaturan `Session Expiry interval` = `0` menyebabkan sesi segera berakhir setelah terputus. Jika Interval Kedaluwarsa Sesi tidak ditentukan dalam pesan CONNECT, defaultnya adalah 0.


**MQTT 5 Mulai Bersih dan Kedaluwarsa Sesi**  

| Nilai properti | Deskripsi | 
| --- | --- | 
| Clean Start= 1 | Membuat sesi baru dan mengakhiri sesi sebelumnya jika ada. | 
| Clean Start= 0 | Melanjutkan sesi jika sesi sebelumnya ada. | 
| Session Expiry Interval> 0 | Bertahan sesi. | 
| Session Expiry interval= 0 | Tidak bertahan sesi. | 

Dalam MQTT 5, jika Anda mengatur `Clean Start` = `1` dan `Session Expiry Interval` =`0`, ini setara dengan sesi bersih MQTT 3. Jika Anda mengatur `Clean Start` = `0` dan `Session Expiry Interval` >`0`, ini setara dengan sesi persisten MQTT 3.

**catatan**  
Versi Cross MQTT (MQTT 3 dan MQTT 5) sesi persisten tidak didukung. Sesi persisten MQTT 3 tidak dapat dilanjutkan sebagai sesi MQTT 5, dan sebaliknya. 

### Operasi selama sesi persisten
<a name="mqtt-persistent-sessions-operation"></a>

Klien menggunakan `sessionPresent` atribut dalam pesan koneksi yang diakui (`CONNACK`) untuk menentukan apakah ada sesi persisten. Jika `sessionPresent` ada`1`, sesi persisten hadir dan pesan yang disimpan untuk klien dikirim ke klien setelah klien menerima`CONNACK`, seperti yang dijelaskan dalam [lalu lintas Pesan setelah koneksi ulang ke sesi persisten](#persistent-session-reconnect). Jika `sessionPresent` ya`1`, klien tidak perlu berlangganan kembali. Namun, jika `sessionPresent` ada`0`, tidak ada sesi persisten yang hadir dan klien harus berlangganan kembali ke filter topiknya.

Setelah klien bergabung dengan sesi persisten, klien dapat mempublikasikan pesan dan berlangganan filter topik tanpa tanda tambahan pada setiap operasi.

### Lalu lintas pesan setelah koneksi ulang ke sesi persisten
<a name="persistent-session-reconnect"></a>

Sesi persisten mewakili hubungan yang sedang berlangsung antara klien dan broker pesan MQTT. Ketika klien terhubung ke broker pesan menggunakan sesi persisten, broker pesan menyimpan semua langganan yang dibuat klien selama koneksi. Ketika klien terputus, broker pesan menyimpan pesan QoS 1 yang tidak diakui dan pesan QoS 1 baru yang dipublikasikan ke topik yang menjadi langganan klien. Pesan disimpan sesuai dengan batas akun. Pesan yang melebihi batas akan dihapus. Untuk informasi selengkapnya tentang batas pesan persisten, lihat [AWS IoT Core titik akhir dan kuota](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits). Ketika klien terhubung kembali ke sesi persistennya, semua langganan dipulihkan dan semua pesan yang disimpan dikirim ke klien dengan kecepatan maksimum 10 pesan per detik. Di MQTT 5, jika QoS 1 keluar dengan Interval Kedaluwarsa Pesan berakhir saat klien offline, setelah koneksi dilanjutkan, klien tidak akan menerima pesan kedaluwarsa.

Setelah koneksi ulang, pesan yang disimpan dikirim ke klien, dengan kecepatan yang dibatasi hingga 10 pesan tersimpan per detik, bersama dengan lalu lintas pesan saat ini hingga [https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits)batas tercapai. Karena tingkat pengiriman pesan yang disimpan terbatas, akan memakan waktu beberapa detik untuk mengirimkan semua pesan yang disimpan jika sesi memiliki lebih dari 10 pesan tersimpan untuk dikirim setelah koneksi ulang.

Untuk pelanggan bersama, pesan akan diantrian jika setidaknya satu pelanggan grup menggunakan sesi persisten dan tidak ada pelanggan yang online untuk menerima pesan QoS 1. Dequeuing pesan dilakukan dengan kecepatan maksimum 20 pesan per detik per pelanggan aktif dalam grup. Untuk informasi selengkapnya, lihat [antrian pesan langganan bersama](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html#mqtt5-shared-subscription-queuing).

### Mengakhiri sesi persisten
<a name="ending-a-persistent-session"></a>

Sesi persisten dapat diakhiri dengan cara-cara berikut:
+ Waktu kedaluwarsa sesi persisten berlalu. Timer kedaluwarsa sesi persisten dimulai ketika broker pesan mendeteksi bahwa klien telah terputus, baik oleh klien memutuskan sambungan atau waktu koneksi habis. 
+ Klien mengirimkan `CONNECT` pesan yang menyetel `cleanSession` bendera ke`1`.
+ Anda memutuskan sambungan klien secara manual dan menghapus sesi menggunakan `DeleteConnection` API. Untuk informasi selengkapnya, lihat [Mengelola koneksi MQTT](#mqtt-client-disconnect).

Di MQTT 3, nilai default dari waktu kedaluwarsa sesi persisten adalah satu jam, dan ini berlaku untuk semua sesi di akun.

Di MQTT 5, Anda dapat mengatur Interval Kedaluwarsa Sesi untuk setiap sesi pada paket CONNECT dan DISCONNECT. 

Untuk Interval Kedaluwarsa Sesi pada paket DISCONNECT: 
+ Jika sesi saat ini memiliki Interval Kedaluwarsa Sesi 0, Anda tidak dapat mengatur Interval Kedaluwarsa Sesi menjadi lebih besar dari 0 pada paket DISCONNECT.
+ Jika sesi saat ini memiliki Interval Kedaluwarsa Sesi lebih besar dari 0, dan Anda mengatur Interval Kedaluwarsa Sesi ke 0 pada paket DISCONNECT, sesi akan berakhir pada DISCONNECT.
+ Jika tidak, Interval Kedaluwarsa Sesi pada paket DISCONNECT akan memperbarui Interval Kedaluwarsa Sesi sesi saat ini.

**catatan**  
Pesan yang disimpan menunggu untuk dikirim ke klien ketika sesi berakhir dibuang; Namun, mereka masih ditagih pada tingkat pesan standar, meskipun mereka tidak dapat dikirim. Untuk informasi selengkapnya tentang harga pesan, lihat [AWS IoT Core Harga](https://aws.amazon.com/iot-core/pricing). Anda dapat mengonfigurasi interval waktu kedaluwarsa.

### Koneksi ulang setelah sesi persisten kedaluwarsa
<a name="reconnect-a-persistent-session"></a>

Jika klien tidak terhubung kembali ke sesi persistennya sebelum kedaluwarsa, sesi berakhir dan pesan yang disimpan akan dibuang. Ketika klien tersambung kembali setelah sesi kedaluwarsa dengan `cleanSession` tanda ke`0`, layanan akan membuat sesi persisten baru. Setiap langganan atau pesan dari sesi sebelumnya tidak tersedia untuk sesi ini karena mereka dibuang ketika sesi sebelumnya kedaluwarsa.

### Biaya pesan sesi persisten
<a name="persistent-session-message-charges"></a>

Pesan dibebankan kepada Anda Akun AWS ketika broker pesan mengirim pesan ke klien atau sesi persisten offline. Ketika perangkat offline dengan sesi persisten menghubungkan kembali dan melanjutkan sesi, pesan yang disimpan dikirim ke perangkat dan dibebankan ke akun Anda lagi. Untuk informasi selengkapnya tentang harga pesan, lihat [AWS IoT Core harga - Pesan](https://aws.amazon.com/iot-core/pricing/#Messaging).

Waktu kedaluwarsa sesi persisten default satu jam dapat ditingkatkan dengan menggunakan proses peningkatan batas standar. Perhatikan bahwa meningkatkan waktu kedaluwarsa sesi dapat meningkatkan biaya pesan Anda karena waktu tambahan dapat memungkinkan lebih banyak pesan disimpan untuk perangkat offline dan pesan tambahan tersebut akan dibebankan ke akun Anda dengan tarif pesan standar. Waktu kedaluwarsa sesi adalah perkiraan dan sesi dapat bertahan hingga 30 menit lebih lama dari batas akun; Namun, sesi tidak akan lebih pendek dari batas akun. Untuk informasi selengkapnya tentang batas sesi, lihat [AWS Service Quotas](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits).

## Pesan yang dipertahankan MQTT
<a name="mqtt-retain"></a>

AWS IoT Core mendukung `RETAIN` bendera yang dijelaskan dalam protokol MQTT. Saat klien menyetel `RETAIN` bendera pada pesan MQTT yang diterbitkannya, AWS IoT Core akan menyimpan pesan tersebut. Kemudian dapat dikirim ke pelanggan baru, diambil dengan memanggil [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html)operasi, dan dilihat di [AWS IoT konsol](https://console.aws.amazon.com//iot/home#/retainedMessages).

**Contoh menggunakan pesan yang dipertahankan MQTT**
+ 

**Sebagai pesan konfigurasi awal**  
Pesan yang disimpan MQTT dikirim ke klien setelah klien berlangganan topik. Jika Anda ingin semua klien yang berlangganan topik menerima pesan yang dipertahankan MQTT tepat setelah langganan mereka, Anda dapat mempublikasikan pesan konfigurasi dengan tanda set. `RETAIN` Klien berlangganan juga menerima pembaruan konfigurasi itu setiap kali pesan konfigurasi baru diterbitkan.
+ 

**Sebagai pesan status terakhir yang diketahui**  
Perangkat dapat mengatur `RETAIN` bendera pada pesan status saat ini sehingga AWS IoT Core akan menyimpannya. Saat aplikasi terhubung atau terhubung kembali, mereka dapat berlangganan topik ini dan mendapatkan status terakhir yang dilaporkan segera setelah berlangganan topik pesan yang dipertahankan. Dengan cara ini mereka dapat menghindari keharusan menunggu hingga pesan berikutnya dari perangkat untuk melihat keadaan saat ini.

**Topics**
+ [

### Tugas umum dengan pesan yang disimpan MQTT di AWS IoT Core
](#mqtt-retain-using)
+ [

### Penagihan dan pesan yang disimpan
](#mqtt-retain-billing)
+ [

### Membandingkan pesan yang dipertahankan MQTT dan sesi persisten MQTT
](#mqtt-retain-persist)
+ [

### MQTT menyimpan pesan dan Device Shadows AWS IoT
](#mqtt-retain-shadow)

### Tugas umum dengan pesan yang disimpan MQTT di AWS IoT Core
<a name="mqtt-retain-using"></a>

AWS IoT Core menyimpan pesan MQTT dengan set bendera. `RETAIN` *Pesan yang disimpan* ini dikirim ke semua klien yang telah berlangganan topik, sebagai pesan MQTT normal, dan mereka juga disimpan untuk dikirim ke pelanggan baru ke topik tersebut.

Pesan yang disimpan MQTT memerlukan tindakan kebijakan khusus untuk memberi wewenang kepada klien untuk mengaksesnya. Untuk contoh penggunaan kebijakan pesan yang dipertahankan, lihat[Contoh kebijakan pesan yang dipertahankan](retained-message-policy-examples.md).

Bagian ini menjelaskan operasi umum yang melibatkan pesan yang disimpan.
+ 

**Membuat pesan yang disimpan**  
Klien menentukan apakah pesan dipertahankan saat memublikasikan pesan MQTT. Klien dapat menyetel `RETAIN` tanda saat memublikasikan pesan menggunakan [Device SDK](iot-sdks.md). Aplikasi dan layanan dapat mengatur `RETAIN` bendera saat mereka menggunakan [`Publish`tindakan](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_Publish.html) untuk mempublikasikan pesan MQTT.

  Hanya satu pesan per nama topik yang dipertahankan. Pesan baru dengan set tanda RETAIN yang dipublikasikan ke topik menggantikan pesan tertahan yang sudah ada yang dikirim ke topik sebelumnya. 
**catatan**  
Anda tidak dapat memublikasikan ke [topik yang dicadangkan](reserved-topics.md) dengan set `RETAIN` bendera.
+ 

**Berlangganan topik pesan yang dipertahankan**  
Klien berlangganan topik pesan yang dipertahankan seperti halnya topik pesan MQTT lainnya. Pesan yang disimpan yang diterima dengan berlangganan topik pesan yang dipertahankan memiliki tanda yang disetel. `RETAIN` 

  Pesan yang disimpan akan dihapus dari AWS IoT Core saat klien menerbitkan pesan yang disimpan dengan muatan pesan 0-byte ke topik pesan yang dipertahankan. Klien yang telah berlangganan topik pesan yang dipertahankan juga akan menerima pesan 0-byte.

  Berlangganan filter topik wild card yang menyertakan topik pesan yang dipertahankan memungkinkan klien menerima pesan berikutnya yang dipublikasikan ke topik pesan yang disimpan, tetapi tidak mengirimkan pesan yang disimpan saat berlangganan.
**catatan**  
Untuk menerima pesan yang disimpan saat berlangganan, filter topik dalam permintaan langganan harus sama persis dengan topik pesan yang disimpan.

  Pesan yang disimpan yang diterima saat berlangganan topik pesan yang dipertahankan memiliki tanda yang disetel. `RETAIN` Pesan yang disimpan yang diterima oleh klien berlangganan setelah berlangganan, jangan.
+ 

**Mengambil pesan yang disimpan**  
Pesan yang disimpan dikirim ke klien secara otomatis ketika mereka berlangganan topik dengan pesan yang disimpan. Agar klien menerima pesan yang disimpan saat berlangganan, klien harus berlangganan nama topik yang tepat dari pesan yang disimpan. Berlangganan filter topik wild card yang menyertakan topik pesan yang dipertahankan memungkinkan klien menerima pesan berikutnya yang dipublikasikan ke topik pesan yang disimpan, tetapi tidak mengirimkan pesan yang disimpan saat berlangganan.

  Layanan dan aplikasi dapat mencantumkan dan mengambil pesan yang disimpan dengan menelepon [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html)dan. [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html)

  Klien tidak dicegah untuk memublikasikan pesan ke topik pesan yang dipertahankan *tanpa* menyetel `RETAIN` bendera. Hal ini dapat menyebabkan hasil yang tidak terduga, seperti pesan yang disimpan tidak cocok dengan pesan yang diterima dengan berlangganan topik.

  Dengan MQTT 5, jika pesan yang disimpan memiliki Interval Kedaluwarsa Pesan yang disetel dan pesan yang disimpan kedaluwarsa, pelanggan baru yang berlangganan topik tersebut tidak akan menerima pesan yang disimpan setelah berlangganan berhasil.
+ 

**Daftar topik pesan yang dipertahankan**  
[Anda dapat mencantumkan pesan yang disimpan dengan menelepon [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html)dan pesan yang disimpan dapat dilihat di konsol.AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages) 
+ 

**Mendapatkan detail pesan yang disimpan**  
Anda bisa mendapatkan detail pesan yang disimpan dengan menelepon [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html)dan mereka dapat dilihat di [AWS IoT konsol](https://console.aws.amazon.com//iot/home#/retainedMessages).
+ 

**Mempertahankan pesan Will**  
MQTT [*Akan* pesan](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Will_Flag) yang dibuat ketika perangkat terhubung dapat dipertahankan dengan mengatur `Will Retain` bendera di bidang. `Connect Flag bits`
+ 

**Menghapus pesan yang disimpan**  
Perangkat, aplikasi, dan layanan dapat menghapus pesan yang disimpan dengan menerbitkan pesan dengan `RETAIN` tanda set dan muatan pesan kosong (0-byte) ke nama topik pesan yang disimpan untuk dihapus. Pesan semacam itu menghapus pesan yang disimpan dari AWS IoT Core, dikirim ke klien dengan berlangganan topik, tetapi tidak dipertahankan oleh. AWS IoT Core

  [Pesan yang disimpan juga dapat dihapus secara interaktif dengan mengakses pesan yang disimpan di konsol.AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages) Pesan yang disimpan yang dihapus dengan menggunakan [AWS IoT konsol](https://console.aws.amazon.com//iot/home#/retainedMessages) juga mengirim pesan 0-byte ke klien yang telah berlangganan topik pesan yang dipertahankan.

  Pesan yang disimpan tidak dapat dipulihkan setelah dihapus. Klien perlu mempublikasikan pesan tertahan baru untuk menggantikan pesan yang dihapus.
+ 

**Debugging dan pemecahan masalah pesan yang disimpan**  
[AWS IoT Konsol](https://console.aws.amazon.com//iot/home#) menyediakan beberapa alat untuk membantu Anda memecahkan masalah pesan yang disimpan:
  + 

**Halaman **[pesan yang disimpan](https://console.aws.amazon.com//iot/home#/retainedMessages)****  
Halaman **pesan yang disimpan** di AWS IoT konsol menyediakan daftar paginasi pesan yang disimpan yang telah disimpan oleh Akun Anda di Wilayah saat ini. Dari halaman ini Anda dapat:
    + Lihat detail setiap pesan yang disimpan, seperti payload pesan, QoS, waktu diterima.
    + Perbarui isi pesan yang disimpan.
    + Hapus pesan yang disimpan.
  + 

**Klien **[uji MQTT](https://console.aws.amazon.com//iot/home#/test)****  
Halaman **klien pengujian MQTT** di AWS IoT konsol dapat berlangganan dan mempublikasikan ke topik MQTT. Opsi terbitkan memungkinkan Anda menyetel tanda RETAIN pada pesan yang Anda terbitkan untuk mensimulasikan perilaku perangkat Anda. Anda juga dapat menggunakan klien pengujian MQTT untuk memantau pesan dari klien yang terhubung yang Anda kelola melalui antarmuka koneksi klien. Untuk informasi selengkapnya tentang mengelola koneksi klien, lihat[Mengelola koneksi MQTT](#mqtt-client-disconnect).

  Beberapa hasil yang tidak terduga mungkin merupakan hasil dari aspek-aspek ini tentang bagaimana pesan yang disimpan diimplementasikan AWS IoT Core.
  + 

**Batas pesan yang dipertahankan**  
Ketika akun telah menyimpan jumlah maksimum pesan yang disimpan, AWS IoT Core mengembalikan respons terbatas ke pesan yang diterbitkan dengan set RETAIN dan muatan lebih besar dari 0 byte hingga beberapa pesan yang disimpan dihapus dan jumlah pesan yang dipertahankan turun di bawah batas.
  + 

**Pesanan pengiriman pesan yang dipertahankan**  
Urutan pesan yang disimpan dan pengiriman pesan berlangganan tidak dijamin.

### Penagihan dan pesan yang disimpan
<a name="mqtt-retain-billing"></a>

Menerbitkan pesan dengan `RETAIN` tanda yang disetel dari klien, menggunakan AWS IoT konsol, atau dengan menelepon [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_Publish.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_Publish.html)menimbulkan biaya pesan tambahan yang dijelaskan dalam [AWS IoT Core harga -](https://aws.amazon.com//iot-core/pricing/#Messaging) Pesan.

Mengambil pesan yang disimpan oleh klien, dengan menggunakan AWS IoT konsol, atau dengan menelepon [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html)menimbulkan biaya pengiriman pesan selain biaya penggunaan API normal. Biaya tambahan dijelaskan dalam [AWS IoT Core harga - Pesan](https://aws.amazon.com//iot-core/pricing/#Messaging).

[MQTT [*Akan* pesan](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Will_Flag) yang dipublikasikan ketika perangkat terputus secara tak terduga akan dikenakan biaya pesan yang dijelaskan dalam harga - Pesan.AWS IoT Core](https://aws.amazon.com//iot-core/pricing/#Messaging)

Untuk informasi selengkapnya tentang biaya pengiriman pesan, lihat [AWS IoT Core harga - Pesan](https://aws.amazon.com//iot-core/pricing/#Messaging).

### Membandingkan pesan yang dipertahankan MQTT dan sesi persisten MQTT
<a name="mqtt-retain-persist"></a>

Pesan yang disimpan dan sesi persisten adalah fitur standar MQTT yang memungkinkan perangkat menerima pesan yang diterbitkan saat sedang offline. Pesan yang disimpan dapat dipublikasikan dari sesi persisten. Bagian ini menjelaskan aspek-aspek kunci dari fitur-fitur ini dan bagaimana mereka bekerja sama.


|    |  Pesan yang dipertahankan  |  Sesi persisten  | 
| --- | --- | --- | 
|  **Fitur utama**  |  Pesan yang disimpan dapat digunakan untuk mengonfigurasi atau memberi tahu kelompok besar perangkat setelah terhubung. Pesan yang disimpan juga dapat digunakan di mana Anda ingin perangkat hanya menerima pesan terakhir yang dipublikasikan ke topik setelah koneksi ulang.  |  Sesi persisten berguna untuk perangkat yang memiliki konektivitas intermiten dan dapat melewatkan beberapa pesan penting. Perangkat dapat terhubung dengan sesi persisten untuk menerima pesan yang dikirim saat sedang offline.  | 
|  **Contoh**  |  Pesan yang disimpan dapat memberikan informasi konfigurasi perangkat tentang lingkungan mereka ketika mereka online. Konfigurasi awal dapat mencakup daftar topik pesan lain yang harus berlangganan atau informasi tentang bagaimana seharusnya mengkonfigurasi zona waktu lokalnya.  |  Perangkat yang terhubung melalui jaringan seluler dengan konektivitas intermiten dapat menggunakan sesi persisten untuk menghindari hilangnya pesan penting yang dikirim saat perangkat berada di luar jangkauan jaringan atau perlu mematikan radio selulernya.   | 
|  **Pesan yang diterima saat berlangganan awal suatu topik**  |  Setelah berlangganan topik dengan pesan yang disimpan, pesan tertahan terbaru diterima.  |  Setelah berlangganan topik tanpa pesan yang dipertahankan, tidak ada pesan yang diterima sampai seseorang dipublikasikan ke topik tersebut.  | 
|  **Topik berlangganan setelah koneksi ulang**  |  Tanpa sesi persisten, klien harus berlangganan topik setelah koneksi ulang.  |  Topik berlangganan dipulihkan setelah koneksi ulang.  | 
|  **Pesan diterima setelah koneksi ulang**  |  Setelah berlangganan topik dengan pesan yang disimpan, pesan tertahan terbaru diterima.   |  Semua pesan yang diterbitkan dengan QOS = 1 dan berlangganan dengan QOS =1 saat perangkat terputus dikirim setelah perangkat terhubung kembali.  | 
|  **Kedaluwarsa data/sesi**   |  Di MQTT 3, pesan yang disimpan tidak kedaluwarsa. Mereka disimpan sampai diganti atau dihapus. Di MQTT 5, pesan yang disimpan akan kedaluwarsa setelah Interval Kedaluwarsa Pesan yang Anda tetapkan. Untuk informasi selengkapnya, lihat [Kedaluwarsa Pesan](#mqtt5).  |  Sesi persisten kedaluwarsa jika klien tidak terhubung kembali dalam periode batas waktu. Setelah sesi persisten berakhir, langganan klien dan pesan tersimpan yang diterbitkan dengan QOS = 1 dan berlangganan dengan QOS =1 saat perangkat terputus akan dihapus. Pesan kedaluwarsa tidak akan terkirim. Untuk informasi selengkapnya tentang kedaluwarsa sesi dengan sesi persisten, lihat. [Sesi persisten MQTT](#mqtt-persistent-sessions)  | 

Untuk informasi tentang sesi persisten, lihat[Sesi persisten MQTT](#mqtt-persistent-sessions).

Dengan Pesan Tertahan, klien penerbitan menentukan apakah pesan harus disimpan dan dikirim ke perangkat setelah tersambung, apakah pesan tersebut memiliki sesi sebelumnya atau tidak. Pilihan untuk menyimpan pesan dibuat oleh penerbit dan pesan yang disimpan dikirimkan ke semua klien saat ini dan masa depan yang berlangganan langganan QoS 0 atau QoS 1. Pesan yang disimpan hanya menyimpan satu pesan pada topik tertentu pada satu waktu.

Ketika akun telah menyimpan jumlah maksimum pesan yang disimpan, AWS IoT Core mengembalikan respons terbatas ke pesan yang diterbitkan dengan set RETAIN dan muatan lebih besar dari 0 byte hingga beberapa pesan yang disimpan dihapus dan jumlah pesan yang dipertahankan turun di bawah batas.

### MQTT menyimpan pesan dan Device Shadows AWS IoT
<a name="mqtt-retain-shadow"></a>

Pesan yang disimpan dan Device Shadows menyimpan data dari perangkat, tetapi berperilaku berbeda dan melayani tujuan yang berbeda. Bagian ini menjelaskan persamaan dan perbedaan mereka.


|    |  Pesan yang dipertahankan  |  Bayangan Perangkat  | 
| --- | --- | --- | 
|  **Payload pesan memiliki struktur atau skema yang telah ditentukan sebelumnya**  | Seperti yang didefinisikan oleh implementasi. MQTT tidak menentukan struktur atau skema untuk muatan pesannya. |  AWS IoT mendukung struktur data tertentu.  | 
|  **Memperbarui payload pesan menghasilkan pesan acara**  | Menerbitkan pesan yang disimpan akan mengirimkan pesan ke klien berlangganan, tetapi tidak menghasilkan pesan pembaruan tambahan. |  Memperbarui Device Shadow menghasilkan [pesan pembaruan yang menjelaskan perubahan](https://docs.aws.amazon.com//iot/latest/developerguide/device-shadow-mqtt.html#update-delta-pub-sub-topic).  | 
|  **Pembaruan pesan diberi nomor**  | Pesan yang disimpan tidak diberi nomor secara otomatis. | Dokumen Device Shadow memiliki nomor versi otomatis dan stempel waktu. | 
|  **Muatan pesan dilampirkan ke sumber daya benda**  | Pesan yang disimpan tidak dilampirkan ke sumber daya sesuatu. |  Device Shadows dilampirkan ke sumber daya benda.  | 
|  **Memperbarui elemen individual dari payload pesan**  |  Elemen individual pesan tidak dapat diubah tanpa memperbarui seluruh payload pesan.  |  Elemen individual dari dokumen Device Shadow dapat diperbarui tanpa perlu memperbarui seluruh dokumen Device Shadow.  | 
|  **Klien menerima data pesan saat berlangganan**  |  Klien secara otomatis menerima pesan yang disimpan setelah berlangganan topik dengan pesan yang disimpan.  |  Klien dapat berlangganan pembaruan Device Shadow, tetapi mereka harus meminta status saat ini dengan sengaja.  | 
|  **Pengindeksan dan kemampuan pencarian**  |  Pesan yang disimpan tidak diindeks untuk pencarian.  |  Pengindeksan armada mengindeks data Device Shadow untuk pencarian dan agregasi.  | 

## Pesan Last Will and Testament (LWT) MQTT
<a name="mqtt-lwt"></a>

Last Will and Testament (LWT) adalah fitur di MQTT. Dengan LWT, klien dapat menentukan pesan yang akan dipublikasikan broker ke topik yang ditentukan klien dan mengirimkannya ke semua klien yang berlangganan topik ketika pemutusan yang belum tahu terjadi. Pesan yang ditentukan klien disebut pesan LWT atau Pesan Will, dan topik yang ditentukan klien disebut sebagai Topik Will. Anda dapat menentukan pesan LWT saat perangkat terhubung ke broker. Pesan-pesan ini dapat dipertahankan dengan menyetel `Will Retain` bendera di `Connect Flag bits` bidang selama koneksi. Misalnya, jika `Will Retain` bendera disetel ke`1`, Pesan Will akan disimpan di broker di Topik Will terkait. Untuk informasi selengkapnya, lihat [Akan Pesan](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc479576982).

Saat mengelola koneksi klien, Anda dapat mengontrol apakah pesan LWT dipublikasikan saat Anda memutuskan sambungan klien. Untuk informasi selengkapnya, lihat [Mengelola koneksi MQTT](#mqtt-client-disconnect).

Broker akan menyimpan Pesan Will sampai terjadi pemutusan yang belum diketahui. Ketika itu terjadi, broker akan mempublikasikan pesan ke semua klien yang berlangganan Topik Will untuk memberi tahu pemutusan. Jika klien terputus dari broker dengan pemutusan yang diprakarsai klien menggunakan pesan MQTT DISCONNECT, broker tidak akan mempublikasikan pesan LWT yang disimpan. Dalam semua kasus lain, pesan LWT akan dikirim. Karena sifat asinkron dari pemrosesan pemutusan sambungan, pesan LWT tidak dijamin akan dikirim secara berurutan selama penyambungan ulang. Kami menyarankan Anda menggunakan [peristiwa siklus hidup](life-cycle-events.md) untuk meningkatkan akurasi deteksi status konektivitas, karena peristiwa ini menyediakan atribut seperti stempel waktu dan nomor versi untuk mengelola peristiwa. out-of-order [Untuk daftar lengkap skenario pemutusan saat broker akan mengirim pesan LWT, lihat peristiwa Hubungkan/Putuskan sambungan.](https://docs.aws.amazon.com//iot/latest/developerguide/life-cycle-events.html#connect-disconnect)

## Menggunakan ConnectAttributes
<a name="connect-attribute"></a>

`ConnectAttributes`memungkinkan Anda untuk menentukan atribut apa yang ingin Anda gunakan dalam pesan connect Anda dalam kebijakan IAM Anda seperti `PersistentConnect` dan`LastWill`. Dengan`ConnectAttributes`, Anda dapat membuat kebijakan yang tidak memberikan akses perangkat ke fitur baru secara default, yang dapat membantu jika perangkat dikompromikan.

`connectAttributes`mendukung fitur-fitur berikut:

`PersistentConnect`  
Gunakan `PersistentConnect` fitur ini untuk menyimpan semua langganan yang dibuat klien selama koneksi ketika koneksi antara klien dan broker terputus.

`LastWill`  
Gunakan `LastWill` fitur ini untuk mempublikasikan pesan ke `LastWillTopic` saat klien tiba-tiba terputus.

Secara default, kebijakan Anda memiliki koneksi non-persisten dan tidak ada atribut yang diteruskan untuk koneksi ini. Anda harus menentukan koneksi persisten dalam kebijakan IAM Anda jika Anda ingin memilikinya.

Saat mengelola koneksi klien, Anda dapat melihat atribut koneksi dan konfigurasi sesi untuk klien yang terhubung. Untuk informasi selengkapnya, lihat [Mengelola koneksi MQTT](#mqtt-client-disconnect).

Untuk `ConnectAttributes` contoh, lihat [Connect Policy Examples](connect-policy.md).

## Fitur yang didukung MQTT 5
<a name="mqtt5"></a>

AWS IoT Core dukungan untuk MQTT 5 didasarkan pada [spesifikasi MQTT v5.0](http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html) dengan beberapa perbedaan seperti yang didokumentasikan dalam. [AWS IoT perbedaan dari spesifikasi MQTT](#mqtt-differences)

**Topics**
+ [

### Langganan bersama
](#mqtt5-shared-subscription)
+ [

### Mulai Bersih dan Kedaluwarsa Sesi
](#mqtt5-clean-start)
+ [

### Kode alasan pada semua ACKs
](#mqtt5-reason-code)
+ [

### Alias topik
](#mqtt5-topic-alias)
+ [

### Kedaluwarsa pesan
](#mqtt5-message-expiry)
+ [

### Fitur MQTT 5 lainnya
](#mqtt5-other-features)

### Langganan bersama
<a name="mqtt5-shared-subscription"></a>

AWS IoT Core mendukung langganan bersama untuk MQTT 3.1.1 dan MQTT 5. Langganan bersama memungkinkan beberapa klien untuk berbagi langganan ke suatu topik dan hanya satu klien yang akan menerima pesan yang dipublikasikan ke topik tersebut menggunakan distribusi acak. Langganan bersama dapat secara efektif memuat pesan MQTT saldo di sejumlah pelanggan. Misalnya, Anda memiliki 1.000 perangkat yang menerbitkan topik yang sama, dan 10 aplikasi backend yang memproses pesan tersebut. Dalam hal ini, aplikasi backend dapat berlangganan topik yang sama, dan masing-masing akan secara acak menerima pesan yang diterbitkan oleh perangkat ke topik bersama. Ini secara efektif “berbagi” beban pesan-pesan itu. Langganan bersama juga memungkinkan ketahanan yang lebih baik. Ketika aplikasi backend terputus, broker mendistribusikan beban ke pelanggan yang tersisa dalam grup. Ketika semua pelanggan terputus, pesan diantri.

Kemampuan antrian pesan tersedia untuk langganan bersama pada koneksi MQTT 3.1.1 dan MQTT 5 untuk meningkatkan keandalan pengiriman pesan.

Untuk menggunakan langganan bersama, klien berlangganan [filter topik](https://docs.aws.amazon.com//iot/latest/developerguide/topics.html#topicfilters) langganan bersama sebagai berikut:

```
$share/{ShareName}/{TopicFilter}
```
+ `$share`adalah string literal untuk menunjukkan filter topik Berlangganan Bersama, yang harus dimulai dengan`$share`.
+ `{ShareName}`adalah string karakter untuk menentukan nama bersama yang digunakan oleh sekelompok pelanggan. Filter topik langganan bersama harus berisi `ShareName` dan diikuti oleh `/` karakter. Tidak `{ShareName}` boleh menyertakan karakter berikut:`/`,`+`, atau`#`. Ukuran maksimum untuk `{ShareName}` adalah 128 karakter UTF-8. 
+ `{TopicFilter}`mengikuti sintaks [filter topik](https://docs.aws.amazon.com//iot/latest/developerguide/topics.html#topicfilters) yang sama dengan langganan non-bersama. Ukuran maksimum untuk `{TopicFilter}` adalah 256 karakter UTF-8.
+ Dua garis miring yang diperlukan (`/`) untuk `$share/{ShareName}/{TopicFilter}` tidak termasuk dalam [Jumlah garis miring maksimum dalam batas filter topik dan topik](https://console.aws.amazon.com/servicequotas/home/services/iotcore/quotas/L-AD5A8D4F). 

Langganan yang memiliki hal yang sama `{ShareName}/{TopicFilter}` termasuk dalam grup langganan bersama yang sama. Anda dapat membuat beberapa grup langganan bersama dan tidak melebihi [batas Langganan Bersama per grup](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits). Untuk informasi selengkapnya, lihat [AWS IoT Core titik akhir dan kuota dari Referensi AWS](https://docs.aws.amazon.com//general/latest/gr/iot-core.html) *Umum*.

Tabel berikut membandingkan langganan non-bersama dan langganan bersama:


****  

| Langganan | Deskripsi | Contoh filter topik | 
| --- | --- | --- | 
| Langganan yang tidak dibagikan | Setiap klien membuat langganan terpisah untuk menerima pesan yang dipublikasikan. Saat pesan dipublikasikan ke suatu topik, semua pelanggan topik tersebut menerima salinan pesan tersebut. | <pre>sports/tennis<br />sports/#</pre> | 
| Langganan bersama | Beberapa klien dapat berbagi langganan ke topik dan hanya satu klien yang akan menerima pesan yang dipublikasikan ke topik itu pada distribusi acak. |  <pre>$share/consumer/sports/tennis<br />$share/consumer/sports/#</pre>  | 


****  

| Alur langganan non-bersama  | Alur langganan bersama | 
| --- | --- | 
|  ![\[Langganan reguler untuk MQTT 3 dan MQTT 5 in. AWS IoT Core\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/images/mqtt_regular_subscription.gif)  |  ![\[Langganan bersama untuk MQTT 3 dan MQTT 5 in. AWS IoT Core\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/images/mqtt_shared_subscription.gif)  | 

**Catatan penting untuk menggunakan langganan bersama**
+ Jika grup pelanggan bersama terdiri dari pelanggan sesi persisten, ketika semua pelanggan dalam grup bersama terputus, atau jika ada pelanggan yang melanggar permintaan Publikasikan per detik per batas koneksi, pesan QoS 1 yang tidak diakui dan pesan QoS 1 yang tidak terkirim yang dipublikasikan ke grup langganan bersama akan diantrian. Untuk informasi selengkapnya, lihat [antrian pesan langganan bersama](#mqtt5-shared-subscription-message-queuing).
+ Pesan QoS 0 yang dipublikasikan ke grup langganan bersama akan dibatalkan jika terjadi kegagalan.
+ Langganan bersama tidak menerima [pesan yang disimpan](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html#mqtt-retain) saat berlangganan pola topik sebagai bagian dari grup pelanggan bersama. Pesan yang dipublikasikan pada topik yang memiliki pelanggan bersama dan memiliki set `RETAIN` bendera dikirimkan ke pelanggan bersama seperti pesan publikasi lainnya.
+ Saat langganan bersama berisi karakter wildcard (\$1 atau \$1), mungkin ada beberapa langganan bersama yang cocok dengan suatu topik. Jika itu terjadi, broker pesan menyalin pesan penerbitan dan mengirimkannya ke klien acak di setiap langganan bersama yang cocok. Perilaku wildcard dari langganan bersama dapat dijelaskan dalam diagram berikut.  
![\[Langganan bersama dengan karakter wildcard di. AWS IoT Core\]](http://docs.aws.amazon.com/id_id/iot/latest/developerguide/images/mqtt_shared_subscriptions_wildcard.gif)

  Dalam contoh ini, ada tiga langganan bersama yang cocok dengan topik MQTT penerbitan. `sports/tennis` Broker pesan menyalin pesan yang diterbitkan dan mengirim pesan ke klien acak di setiap grup yang cocok.

  Klien 1 dan klien 2 berbagi langganan: `$share/consumer1/sports/tennis`

  Klien 3 dan klien 4 berbagi langganan: `$share/consumer1/sports/#`

  Klien 5 dan klien 6 berbagi langganan: `$share/consumer2/sports/tennis`

*Untuk informasi selengkapnya tentang batas langganan bersama, lihat [AWS IoT Core titik akhir dan kuota dari Referensi](https://docs.aws.amazon.com//general/latest/gr/iot-core.html) Umum.AWS * [Untuk menguji langganan bersama menggunakan klien AWS IoT MQTT di konsol, lihat.AWS IoT](https://console.aws.amazon.com/iot/home) [Menguji Langganan Bersama di klien MQTT](view-mqtt-messages.md#view-mqtt-shared-subscriptions) Anda juga dapat melihat topik mana klien yang terhubung berlangganan, termasuk langganan bersama, dengan menggunakan fitur manajemen koneksi klien. Untuk informasi selengkapnya, lihat [Mengelola koneksi MQTT](#mqtt-client-disconnect). Untuk informasi selengkapnya tentang langganan bersama, lihat [Langganan Bersama](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901250) dari MQTTv5 spesifikasi.0.

#### Antrian pesan langganan bersama
<a name="mqtt5-shared-subscription-message-queuing"></a>

Untuk meningkatkan keandalan pengiriman pesan, langganan bersama mencakup kemampuan antrian pesan yang menyimpan pesan ketika tidak ada pelanggan online yang tersedia. Jika grup langganan bersama berisi setidaknya satu anggota dengan sesi persisten, fitur antrian diaktifkan untuk grup. Saat mendistribusikan pesan, anggota online dipilih sebagai penerima. Pesan QoS 1 diantrian ketika tidak ada anggota yang ditemukan online atau ketika pelanggan melebihi batas. [https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits) Pesan antrian dikirimkan ketika anggota yang ada melanjutkan sesi persisten mereka, atau anggota baru bergabung dengan grup. Pesan antrian dikirimkan hingga 20 pesan antrian per detik per pelanggan grup aktif, bersama dengan pesan lain yang dikirimkan ke pelanggan sesuai langganan.

Secara default, penyimpanan pesan antrian mengikuti kuota. [https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits) Namun, jika Interval Kedaluwarsa Pesan (MEI) diatur dalam pesan publikasi masuk, MEI akan diutamakan. Ketika MEI hadir, ia menentukan periode penyimpanan pesan, terlepas dari periode kedaluwarsa Sesi Persisten.

Tarif antrian pesan dibatasi sesuai dengan [https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits)kuota, dan jumlah pesan dibatasi oleh [https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits)kuota. Untuk melihat dan mengelola kuota Anda, akses konsol [Service Quotas](https://console.aws.amazon.com/servicequotas/home).

Anda dapat memantau Antrian CloudWatch dengan mencari `ApproximateQueueDepth` di bawah `AWS/Usage` namespace, atau Anda dapat menggunakan perintah CLI berikut untuk membuat daftar metrik yang terkait dengan kedalaman antrian setiap grup langganan bersama. 

```
aws cloudwatch list-metrics --namespace "AWS/Usage" --dimensions Name=Resource,Value='ApproximateQueueDepth'
```

Ketika batas ini terlampaui, hanya pesan yang sudah antri sebelum mencapai batas yang dipertahankan. Pesan masuk baru yang akan melebihi batas dijatuhkan. Sistem tidak mengganti pesan antrian yang lebih lama dengan yang lebih baru.

Antrian pesan direkam dalam CloudWatch metrik dan Log. CloudWatch Untuk informasi tentang entri yang ditulis ke CloudWatch dan CloudWatch Log, lihat [Metrik broker pesan](metrics_dimensions.md#message-broker-metrics) dan[Entri log antrian](cwl-format.md#log-mb-queued). Pesan antrian masih ditagih pada tingkat pesan standar. Untuk informasi selengkapnya tentang harga pesan, lihat [AWS IoT Core Harga](https://aws.amazon.com/iot-core/pricing).

**Siklus hidup sesi dalam grup langganan bersama**

Ketika sesi bersih berlangganan grup, itu menjadi anggota online grup. Ketika berhenti berlangganan atau terputus, sesi bersih meninggalkan grup.

Ketika sesi persisten berlangganan ke grup, itu menjadi anggota online grup. Ketika terputus, itu masih tetap dalam grup, tetapi menjadi anggota offline grup. Ketika terhubung kembali, itu menjadi anggota online lagi. Sesi persisten meninggalkan grup ketika secara eksplisit berhenti berlangganan atau ketika kedaluwarsa setelah terputus.

### Mulai Bersih dan Kedaluwarsa Sesi
<a name="mqtt5-clean-start"></a>

Anda dapat menggunakan Clean Start dan Session Expiry untuk menangani sesi persisten Anda dengan lebih fleksibel. Bendera Mulai Bersih menunjukkan apakah sesi harus dimulai tanpa menggunakan sesi yang ada. Interval Kedaluwarsa Sesi menunjukkan berapa lama untuk mempertahankan sesi setelah pemutusan. Interval kedaluwarsa sesi dapat dimodifikasi pada saat pemutusan. Untuk informasi selengkapnya, lihat [Sesi persisten MQTT](#mqtt-persistent-sessions).

### Kode alasan pada semua ACKs
<a name="mqtt5-reason-code"></a>

Anda dapat men-debug atau memproses pesan kesalahan dengan lebih mudah menggunakan kode alasan. Kode alasan dikembalikan oleh broker pesan berdasarkan jenis interaksi dengan broker (Berlangganan, Publikasikan, Akui). Untuk informasi lebih lanjut, lihat kode [alasan MQTT](#mqtt5-reason-codes). Untuk daftar lengkap kode alasan MQTT, lihat Spesifikasi [MQTT](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901031) v5.

### Alias topik
<a name="mqtt5-topic-alias"></a>

Anda dapat mengganti nama topik dengan alias topik, yang merupakan bilangan bulat dua byte. Menggunakan alias topik dapat mengoptimalkan transmisi nama topik untuk berpotensi mengurangi biaya data pada layanan data terukur. AWS IoT Core memiliki batas default 8 alias topik. Untuk informasi selengkapnya, lihat [AWS IoT Core titik akhir dan kuota dari Referensi AWS](https://docs.aws.amazon.com//general/latest/gr/iot-core.html) *Umum*.

### Kedaluwarsa pesan
<a name="mqtt5-message-expiry"></a>

Anda dapat menambahkan nilai kedaluwarsa pesan ke pesan yang dipublikasikan. Nilai-nilai ini mewakili Interval Kedaluwarsa Pesan (MEI) dalam hitungan detik. Jika pesan belum dikirim ke pelanggan dalam interval tersebut, pesan akan kedaluwarsa dan dihapus. Jika Anda tidak menyetel nilai kedaluwarsa pesan, pesan tidak akan kedaluwarsa.

Pada outbound, pelanggan akan menerima pesan dengan sisa waktu yang tersisa dalam interval kedaluwarsa. Misalnya, jika pesan publikasi masuk memiliki pesan kedaluwarsa 30 detik, dan dialihkan ke pelanggan setelah 20 detik, bidang kedaluwarsa pesan akan diperbarui menjadi 10. Dimungkinkan untuk pesan yang diterima oleh pelanggan untuk memiliki MEI yang diperbarui sebesar 0. Ini karena segera setelah waktu yang tersisa adalah 999 ms atau kurang, itu akan diperbarui ke 0.

Dalam AWS IoT Core, MEI minimum adalah 1. Jika interval diatur ke 0 dari sisi klien, itu akan disesuaikan ke 1. Interval kadaluwarsa pesan maksimum adalah 604800 (7 hari). Nilai apa pun yang lebih tinggi dari ini akan disesuaikan dengan nilai maksimum.

Dalam komunikasi lintas versi, perilaku kedaluwarsa pesan ditentukan oleh versi MQTT dari pesan publikasi masuk. Misalnya, pesan dengan kedaluwarsa pesan yang dikirim oleh sesi yang terhubung melalui MQTT5 dapat kedaluwarsa untuk perangkat yang berlangganan sesi. MQTT3 Tabel di bawah ini mencantumkan cara kedaluwarsa pesan mendukung jenis pesan publikasi berikut:


****  

| Publikasikan Jenis Pesan | Interval Kedaluwarsa Pesan | 
| --- | --- | 
| Publikasikan Reguler | Jika server gagal mengirimkan pesan dalam waktu yang ditentukan, pesan yang kedaluwarsa akan dihapus dan pelanggan tidak akan menerimanya. Ini termasuk situasi seperti ketika perangkat tidak mempublikasikan pesan QoS 1 mereka.  | 
| Mempertahankan | Jika pesan yang disimpan kedaluwarsa dan klien baru berlangganan topik, klien tidak akan menerima pesan saat berlangganan. | 
| Kehendak Terakhir | Interval untuk pesan terakhir akan dimulai setelah klien terputus dan server mencoba mengirimkan pesan wasiat terakhir kepada pelanggannya. | 
| Pesan antrian | Jika QoS 1 keluar dengan Interval Kedaluwarsa Pesan kedaluwarsa saat klien offline, setelah sesi [persisten](#mqtt-persistent-sessions) dilanjutkan, klien tidak akan menerima pesan kedaluwarsa. | 

### Fitur MQTT 5 lainnya
<a name="mqtt5-other-features"></a>

**Putuskan sambungan server**

Ketika pemutusan terjadi, server dapat secara proaktif mengirim klien DISCONNECT untuk memberi tahu penutupan koneksi dengan kode alasan untuk pemutusan.

**Permintaan/Tanggapan**

Penayang dapat meminta tanggapan dikirim oleh penerima ke topik yang ditentukan penerbit pada saat penerimaan.

**Ukuran Paket Maksimum**

Client dan Server dapat secara independen menentukan ukuran paket maksimum yang mereka dukung.

**Format payload dan jenis konten**

Anda dapat menentukan format payload (biner, teks) dan jenis konten saat pesan dipublikasikan. Ini diteruskan ke penerima pesan.

## Properti MQTT 5
<a name="mqtt5-properties"></a>

Properti MQTT 5 merupakan tambahan penting pada standar MQTT untuk mendukung fitur MQTT 5 baru seperti Session Expiry dan polanya. Request/Response Di AWS IoT Core, Anda dapat membuat [aturan](https://docs.aws.amazon.com//iot/latest/developerguide/republish-rule-action.html) yang dapat meneruskan properti dalam pesan keluar, atau menggunakan [HTTP Publish untuk mempublikasikan](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_Publish.html) pesan MQTT dengan beberapa properti baru.

Tabel berikut mencantumkan semua properti MQTT 5 yang mendukung. AWS IoT Core 


| Properti | Deskripsi | Jenis masukan | Paket | 
| --- | --- | --- | --- | 
| Indikator Format Muatan | Nilai Boolean yang menunjukkan apakah payload diformat sebagai UTF-8. | Byte | MEMPUBLIKASIKAN, MENGHUBUNGKAN | 
| Jenis Konten | String UTF-8 yang menggambarkan isi muatan. | Tali UTF-8 | MEMPUBLIKASIKAN, MENGHUBUNGKAN | 
| Topik Respon | String UTF-8 yang menjelaskan topik yang harus dipublikasikan oleh penerima sebagai bagian dari alur permintaan-respons. Topik tidak boleh memiliki karakter wildcard. | Tali UTF-8 | MEMPUBLIKASIKAN, MENGHUBUNGKAN | 
| Data Korelasi | Data biner yang digunakan oleh pengirim pesan permintaan untuk mengidentifikasi permintaan mana yang terkait dengan pesan respons. | Biner | MEMPUBLIKASIKAN, MENGHUBUNGKAN | 
| Properti Pengguna | Pasangan string UTF-8. Properti ini dapat muncul beberapa kali dalam satu paket. Penerima akan menerima pasangan kunci-nilai dalam urutan yang sama dengan yang dikirim. | Pasangan string UTF-8 | HUBUNGKAN, PUBLIKASIKAN, Akan Properti, BERLANGGANAN, PUTUSKAN, BERHENTI BERLANGGANAN | 
| Interval Kedaluwarsa Pesan | Integer 4-byte yang mewakili Interval Kedaluwarsa Pesan dalam hitungan detik. Jika tidak ada, pesan tidak kedaluwarsa. | Bilangan bulat 4-byte | MEMPUBLIKASIKAN, MENGHUBUNGKAN | 
| Interval Kedaluwarsa Sesi |  Integer 4-byte yang mewakili interval kedaluwarsa sesi dalam hitungan detik. AWS IoT Core mendukung maksimal 7 hari, dengan default maksimal satu jam. Jika nilai yang Anda tetapkan melebihi maksimum akun Anda, AWS IoT Core akan mengembalikan nilai yang disesuaikan di CONNACK.  | Bilangan bulat 4-byte | SAMBUNGKAN, SAMBUNGKAN, PUTUSKAN SAMBUNGAN | 
| Pengidentifikasi Klien yang Ditugaskan | ID klien acak yang dihasilkan AWS IoT Core ketika ID klien tidak ditentukan oleh perangkat. ID klien acak harus merupakan pengidentifikasi klien baru yang tidak digunakan oleh sesi lain yang saat ini dikelola oleh broker. | Tali UTF-8 | CONNACK | 
| Server Tetap Hidup | Sebuah integer 2-byte yang mewakili keep alive time yang ditetapkan oleh server. Server akan memutuskan koneksi klien jika klien tidak aktif selama lebih dari waktu tetap hidup. | Bilangan bulat 2 byte | CONNACK | 
| Minta Informasi Masalah | Nilai Boolean yang menunjukkan apakah Reason String atau User Properties dikirim dalam kasus kegagalan. | Byte | MENGHUBUNG | 
| Menerima Maksimum | Bilangan bulat 2-byte yang mewakili jumlah maksimum paket PUBLISH QOS> 0 yang dapat dikirim tanpa menerima PUBACK. | Bilangan bulat 2 byte | SAMBUNGKAN, CONNACK | 
| Topik Alias Maksimum | Nilai ini menunjukkan nilai tertinggi yang akan diterima sebagai Alias Topik. Default-nya adalah 0. | Bilangan bulat 2 byte | SAMBUNGKAN, CONNACK | 
| QoS maksimum | Nilai maksimum QoS yang AWS IoT Core mendukung. Default adalah 1. AWS IoT Core tidak mendukung QoS 2. | Byte | CONNACK | 
| Pertahankan Tersedia |  Nilai Boolean yang menunjukkan apakah broker AWS IoT Core pesan mendukung pesan yang disimpan. Default-nya adalah 1.  | Byte | CONNACK | 
| Ukuran Paket Maksimum | Ukuran paket maksimum yang AWS IoT Core menerima dan mengirim. Tidak boleh melebihi 128 KB. | Bilangan bulat 4-byte | SAMBUNGKAN, CONNACK | 
| Berlangganan Wildcard Tersedia |  Nilai Boolean yang menunjukkan apakah broker AWS IoT Core pesan mendukung Langganan Wildcard Tersedia. Default-nya adalah 1.  | Byte | CONNACK | 
| Pengenal Berlangganan Tersedia |  Nilai Boolean yang menunjukkan apakah broker AWS IoT Core pesan mendukung Pengenal Langganan Tersedia. Default-nya adalah 0.  | Byte | CONNACK | 

## Kode alasan MQTT
<a name="mqtt5-reason-codes"></a>

MQTT 5 memperkenalkan pelaporan kesalahan yang ditingkatkan dengan respons kode alasan. AWS IoT Core dapat mengembalikan kode alasan termasuk tetapi tidak terbatas pada berikut dikelompokkan berdasarkan paket. Untuk daftar lengkap kode alasan yang didukung oleh MQTT 5, lihat spesifikasi [MQTT](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901031) 5.


**Kode Alasan CONNACK**  

| Nilai | Hex | Nama Kode Alasan | Deskripsi | 
| --- | --- | --- | --- | 
| 0 | 0x00 | Berhasil | Koneksi diterima. | 
| 128 | 0x80 | Kesalahan yang tidak ditentukan | Server tidak ingin mengungkapkan alasan kegagalan, atau tidak ada kode alasan lain yang berlaku. | 
| 133 | 0x85 | Client Identifier tidak valid | Pengidentifikasi klien adalah string yang valid tetapi tidak diizinkan oleh server. | 
| 134 | 0x86 | Nama Pengguna atau Kata Sandi Buruk | Server tidak menerima nama pengguna atau kata sandi yang ditentukan oleh klien. | 
| 135 | 0x87 | Tidak diotorisasi | Klien tidak berwenang untuk terhubung. | 
| 144 | 0x90 | Nama Topik tidak valid | Nama Topik Will dibentuk dengan benar tetapi tidak diterima oleh server. | 
| 151 | 0x97 | Kuota terlampaui | Batas implementasi atau administrasi yang diberlakukan telah terlampaui. | 
| 155 | 0x9B | QoS tidak didukung | Server tidak mendukung QoS yang ditetapkan di Will QoS. | 


**Kode Alasan PUBACK**  

| Nilai | Hex | Nama Kode Alasan | Deskripsi | 
| --- | --- | --- | --- | 
| 0 | 0x00 | Berhasil | Pesan diterima. Publikasi pesan QoS 1 berlangsung. | 
| 128 | 0x80 | Kesalahan yang tidak ditentukan | Penerima tidak menerima publikasi, tetapi tidak ingin mengungkapkan alasannya, atau tidak cocok dengan salah satu nilai lainnya. | 
| 135 | 0x87 | Tidak diotorisasi | PUBLISH tidak diotorisasi. | 
| 144 | 0x90 | Nama Topik tidak valid | Nama topik tidak cacat, tetapi tidak diterima oleh klien atau server. | 
| 145 | 0x91 | Pengenal paket yang digunakan | Packet identifier sudah digunakan. Ini mungkin menunjukkan ketidakcocokan dalam keadaan sesi antara klien dan server. | 
| 151 | 0x97 | Kuota terlampaui | Batas implementasi atau administrasi yang diberlakukan telah terlampaui. | 


**PUTUSKAN Kode Alasan**  

| Nilai | Hex | Nama Kode Alasan | Deskripsi | 
| --- | --- | --- | --- | 
| 129 | 0x81 | Paket cacat | Paket yang diterima tidak sesuai dengan spesifikasi ini. | 
| 130 | 0x82 | Kesalahan Protokol | Paket yang tidak terduga atau rusak diterima. | 
| 135 | 0x87 | Tidak diotorisasi | Permintaan tidak diizinkan. | 
| 139 | 0x8B | Server dimatikan | Server dimatikan. | 
| 141 | 0x8D | Keep Alive timeout | Koneksi ditutup karena tidak ada paket yang diterima selama 1,5 kali waktu Keep Alive. | 
| 142 | 0x8E | Sesi diambil alih | Koneksi lain menggunakan clientID yang sama telah terhubung, menyebabkan koneksi ini ditutup. | 
| 143 | 0x8F | Filter Topik tidak valid | Filter topik dibentuk dengan benar tetapi tidak diterima oleh server. | 
| 144 | 0x90 | Nama Topik tidak valid | Nama topik dibentuk dengan benar tetapi tidak diterima oleh klien atau server ini. | 
| 147 | 0x93 | Menerima maksimum terlampaui | Klien atau server telah menerima lebih dari publikasi Terima Maksimum yang belum dikirim PUBACK atau PUBCOMP. | 
| 148 | 0x94 | Topik Alias tidak valid | Klien atau server telah menerima paket PUBLISH yang berisi alias topik yang lebih besar dari Alias Topik Maksimum yang dikirim dalam paket CONNECT atau CONNACK. | 
| 151 | 0x97 | Kuota terlampaui | Batas implementasi atau administrasi yang diberlakukan telah terlampaui. | 
| 152 | 0x98 | Tindakan administratif | Koneksi ditutup karena tindakan administratif. | 
| 155 | 0x9B | QoS tidak didukung | Klien menentukan QoS lebih besar dari QoS yang ditentukan dalam QoS Maksimum di CONNACK. | 
| 161 | 0xA1 | Pengidentifikasi Langganan tidak didukung | Server tidak mendukung pengidentifikasi langganan; langganan tidak diterima. | 


**Kode Alasan SUBACK**  

| Nilai | Hex | Nama Kode Alasan | Deskripsi | 
| --- | --- | --- | --- | 
| 0 | 0x00 | Diberikan QoS 0 | Langganan diterima dan QoS maksimum yang dikirim adalah QoS 0. Ini mungkin QoS yang lebih rendah dari yang diminta. | 
| 1 | 0x01 | Diberikan QoS 1 | Langganan diterima dan QoS maksimum yang dikirim adalah QoS 1. Ini mungkin QoS yang lebih rendah dari yang diminta. | 
| 128 | 0x80 | Kesalahan yang tidak ditentukan | Langganan tidak diterima dan Server tidak ingin mengungkapkan alasan atau tidak ada Kode Alasan lainnya yang berlaku. | 
| 135 | 0x87 | Tidak diotorisasi | Klien tidak berwenang untuk membuat langganan ini. | 
| 143 | 0x8F | Filter Topik tidak valid | Filter Topik dibentuk dengan benar tetapi tidak diizinkan untuk Klien ini. | 
| 145 | 0x91 | Packet Identifier sedang digunakan | Packet Identifier yang ditentukan sudah digunakan. | 
| 151 | 0x97 | Kuota terlampaui | Batas implementasi atau administrasi yang diberlakukan telah terlampaui. | 


**Kode Alasan UNSUBACK**  

| Nilai | Hex | Nama Kode Alasan | Deskripsi | 
| --- | --- | --- | --- | 
| 0 | 0x00 | Berhasil | Langganan dihapus. | 
| 128 | 0x80 | Kesalahan yang tidak ditentukan | Berhenti berlangganan tidak dapat diselesaikan dan Server tidak ingin mengungkapkan alasan atau tidak ada Kode Alasan lainnya yang berlaku. | 
| 143 | 0x8F | Filter Topik tidak valid | Filter Topik dibentuk dengan benar tetapi tidak diizinkan untuk Klien ini. | 
| 145 | 0x91 | Packet Identifier sedang digunakan | Packet Identifier yang ditentukan sudah digunakan. | 

## AWS IoT perbedaan dari spesifikasi MQTT
<a name="mqtt-differences"></a>

Implementasi broker pesan didasarkan pada spesifikasi [MQTT v3.1.1 dan spesifikasi](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html) [MQTT v5.0, tetapi berbeda dari spesifikasi](http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html) dengan cara ini:
+ AWS IoT tidak mendukung paket berikut untuk MQTT 3: PUBREC, PUBREL, dan PUBCOMP.
+ AWS IoT tidak mendukung paket berikut untuk MQTT 5: PUBREC, PUBREL, PUBCOMP, dan AUTH.
+ AWS IoT tidak mendukung pengalihan server MQTT 5.
+ AWS IoT mendukung kualitas layanan MQTT (QoS) level 0 dan 1 saja. AWS IoT tidak mendukung penerbitan atau berlangganan dengan QoS level 2. Ketika QoS level 2 diminta, broker pesan tidak mengirim PUBACK atau SUBACK.
+ Di AWS IoT, berlangganan topik dengan QoS level 0 berarti pesan dikirimkan nol kali atau lebih. Sebuah pesan dapat disampaikan lebih dari satu kali. Pesan yang dikirim lebih dari satu kali dapat dikirim dengan ID paket yang berbeda. Dalam kasus ini, bendera DUP tidak disetel.
+ Saat menanggapi permintaan koneksi, broker pesan mengirim pesan CONNACK. Pesan ini berisi bendera untuk menunjukkan apakah koneksi melanjutkan sesi sebelumnya.
+ Sebelum mengirim paket kontrol tambahan atau permintaan pemutusan sambungan, klien harus menunggu pesan CONNACK diterima di perangkat mereka dari broker pesan. AWS IoT 
+ Ketika klien berlangganan topik, mungkin ada penundaan antara waktu broker pesan mengirim SUBACK dan waktu klien mulai menerima pesan baru yang cocok.
+ Saat klien menggunakan karakter wildcard `#` dalam filter topik untuk berlangganan topik, semua string di dan di bawah levelnya dalam hierarki topik akan dicocokkan. Namun, topik induk tidak cocok. Misalnya, langganan topik `sensor/#` menerima pesan yang dipublikasikan ke topik`sensor/`, `sensor/temperature``sensor/temperature/room1`, tetapi bukan pesan yang dipublikasikan ke`sensor`. Untuk informasi selengkapnya tentang wildcard, lihat[Filter nama topik](topics.md#topicfilters).
+ Broker pesan menggunakan ID klien untuk mengidentifikasi setiap klien. ID klien diteruskan dari klien ke broker pesan sebagai bagian dari muatan MQTT. Dua klien dengan ID klien yang sama tidak dapat dihubungkan secara bersamaan ke broker pesan. Ketika klien terhubung ke broker pesan menggunakan ID klien yang digunakan klien lain, koneksi klien baru diterima dan klien yang terhubung sebelumnya terputus. Anda juga dapat secara manual memutuskan klien menggunakan APIs. Untuk informasi selengkapnya, lihat [Mengelola koneksi MQTT](#mqtt-client-disconnect).
+ Pada kesempatan yang jarang terjadi, broker pesan mungkin mengirim ulang pesan PUBLISH logis yang sama dengan ID paket yang berbeda.
+ Berlangganan filter topik yang berisi karakter wildcard tidak dapat menerima pesan yang disimpan. Untuk menerima pesan yang disimpan, permintaan berlangganan harus berisi filter topik yang sama persis dengan topik pesan yang disimpan.
+ Broker pesan tidak menjamin urutan pesan dan ACK diterima.
+ AWS IoT dapat memiliki batasan yang berbeda dari spesifikasi. Untuk informasi lebih lanjut, lihat [broker AWS IoT Core pesan dan batas protokol dan kuota](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits) dari *Panduan AWS IoT Referensi*.
+ Bendera DUP MQTT tidak didukung.

## Mengelola koneksi MQTT
<a name="mqtt-client-disconnect"></a>

AWS IoT Core menyediakan APIs untuk membantu Anda mengelola koneksi MQTT, termasuk kemampuan untuk memutuskan klien dan mengelola sesi mereka. Kemampuan ini memberi Anda kontrol lebih besar atas armada AWS IoT klien Anda dan membantu mengatasi masalah koneksi.

### DeleteConnection API
<a name="delete-connection-api"></a>

Gunakan `DeleteConnection` API untuk memutuskan sambungan perangkat MQTT AWS IoT Core dengan menentukan klien mereka. IDs Ketika Anda memutuskan koneksi klien, AWS IoT Core putuskan klien dari broker AWS IoT Core pesan dan secara opsional dapat membersihkan status sesi dan menekan pesan Kehendak dan Perjanjian Terakhir (LWT).

Saat Anda memanggil `DeleteConnection` API, AWS IoT Core lakukan beberapa tindakan untuk memastikan pemutusan yang bersih. AWS IoT Core pertama mengirimkan pesan pemutusan MQTT ke klien untuk mengakhiri sesi MQTT. Layanan kemudian menutup TCP/TLS soket yang mendasarinya.

Broker pesan mengirimkan `DISCONNECT` paket ke perangkat dan menerbitkan [peristiwa siklus hidup](life-cycle-events.md) dengan alasan pemutusan sambungan. `API_INITIATED_DISCONNECT` Ini membantu Anda mengidentifikasi kapan pemutusan dimulai melalui API daripada oleh klien atau karena masalah jaringan. Anda dapat memantau peristiwa ini untuk tujuan visibilitas, pemecahan masalah, dan audit. Misalnya, Anda dapat menggunakan AWS IoT aturan untuk memproses peristiwa ini untuk melacak kapan dan mengapa klien terputus.

Jika Anda menyetel `cleanSession` parameter ke`true`, AWS IoT Core menghapus status sesi klien, termasuk semua langganan dan pesan antrian. Jika Anda membersihkan sesi, sesi persisten dihentikan. Jika klien adalah sesi persisten dan `preventWillMessage` parameter diatur ke`false`, layanan mengirimkan pesan LWT jika tersedia, yang berguna selama operasi pemeliharaan yang direncanakan.

Saat Anda memanggil `DeleteConnection` API, proses pemutusan segera dimulai, tetapi waktu yang tepat kapan klien mengenali pemutusan dapat bervariasi berdasarkan kondisi jaringan dan implementasi klien. Sebagian besar klien akan mendeteksi pemutusan dalam beberapa detik, tetapi dalam beberapa kasus dengan konektivitas jaringan yang buruk, mungkin perlu waktu lebih lama bagi klien untuk mengenali bahwa itu telah terputus.

**catatan**  
Dengan memaksa pemutusan, klien harus mengautentikasi ulang dan mengotorisasi ulang dengan status sesi baru. Panggilan API itu sendiri tidak mencegah koneksi ulang klien. Jika ini diinginkan, kredensi atau kebijakan klien juga harus dimodifikasi sebelum mengeluarkan panggilan `DeleteConnection` API.

Untuk informasi lebih lanjut tenngenai harga, lihat [harga AWS IoT Core](https://aws.amazon.com/iot-core/pricing/).

#### Kasus penggunaan
<a name="delete-connection-use-cases"></a>

`DeleteConnection`API berguna untuk mengelola klien yang berperilaku buruk yang menunjukkan perilaku bermasalah atau mengkonsumsi sumber daya yang berlebihan. Dengan memaksa pemutusan sambungan, Anda dapat memastikan bahwa klien membangun kembali koneksi mereka dengan otentikasi dan otorisasi yang tepat, yang dapat membantu menyelesaikan masalah konsumsi sumber daya.

Skenario pengalihan klien juga mendapat manfaat dari API ini. Saat Anda perlu mengarahkan klien ke titik akhir yang berbeda atau Wilayah AWS, Anda dapat memutuskannya secara terprogram dan menyambungkannya kembali ke titik akhir yang berbeda AWS IoT Core dengan mengubah pengaturan DNS. API ini dapat membantu menyelesaikan koneksi yang macet atau menghapus status sesi bermasalah yang mungkin mencegah operasi normal.

#### Parameter API:
<a name="delete-connection-parameters"></a>

`DeleteConnection`API menerima parameter berikut:

ClientID (wajib)  
Pengidentifikasi unik klien MQTT untuk memutuskan sambungan. Ini ditentukan dalam jalur URL. ID klien tidak dapat memulai dengan tanda dolar (\$1).  
Klien MQTT IDs dapat berisi karakter yang tidak valid dalam permintaan HTTP. Saat menggunakan `DeleteConnection` API, Anda harus menyandikan URL (encode persen) karakter apa pun di ID klien yang valid di MQTT tetapi tidak di HTTP. Ini termasuk karakter khusus seperti spasi, garis miring maju (/), dan karakter UTF-8. Misalnya, spasi menjadi% 20, garis miring ke depan menjadi% 2F, dan karakter UTF-8 ü menjadi% C 3% BC. Pengkodean yang tepat memastikan bahwa klien IDs MQTT ditransmisikan dengan benar dalam panggilan API berbasis HTTP.

CleanSession (opsional)  
Menentukan apakah akan menghapus keadaan sesi klien saat memutuskan sambungan. Setel `true` untuk menghapus semua informasi sesi, termasuk langganan dan pesan antrian. Setel `false` untuk mempertahankan status sesi. Secara default, ini diatur ke `false` (mempertahankan status sesi). Untuk sesi bersih parameter ini akan diabaikan.

preventWillMessage (opsional)  
Mengontrol apakah AWS IoT Core mengirimkan pesan Kehendak dan Perjanjian Terakhir (LWT) jika tersedia pada saat pemutusan. Setel `true` untuk mencegah pengiriman pesan LWT. Setel `false` untuk memungkinkan pengiriman. Secara default, ini diatur ke `false` (mengirimkan LWT jika tersedia).

#### Sintaks API
<a name="delete-connection-syntax"></a>

`DeleteConnection`API menggunakan format permintaan HTTP berikut:

```
DELETE /connections/<clientId>?cleanSession=<cleanSession>&preventWillMessage=<preventWillMessage> HTTP/1.1
```

Contoh permintaan:

```
// Basic disconnect (preserves session, allows LWT message)
DELETE /connections/myDevice123 HTTP/1.1

// Disconnect and clear session
DELETE /connections/myDevice123?cleanSession=TRUE HTTP/1.1

// Disconnect, clear session, and prevent LWT message
DELETE /connections/myDevice123?cleanSession=TRUE&preventWillMessage=TRUE HTTP/1.1
```

Permintaan yang berhasil mengembalikan HTTP 200 OK tanpa badan respons.

**catatan**  
Nama layanan yang digunakan oleh [AWS Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) untuk menandatangani permintaan adalah: *iotdevicegateway*. Anda dapat menemukan titik akhir Anda dengan menggunakan `aws iot describe-endpoint --endpoint-type iot:Data-ATS` perintah.

#### Izin yang diperlukan
<a name="delete-connection-permissions"></a>

Untuk menggunakan `DeleteConnection` API, Anda memerlukan izin IAM berikut:

```
iot:DeleteConnection
```

Anda dapat memberikan cakupan izin ini ke klien tertentu IDs menggunakan kebijakan berbasis sumber daya. Contoh:

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:DeleteConnection",
            "Resource": "arn:aws:iot:region:account:client/myDevice*"
        }
    ]
}
```

#### Pertimbangan penting
<a name="delete-connection-considerations"></a>

Klien yang terputus dapat segera mencoba menyambung kembali kecuali Anda telah menerapkan logika tambahan untuk mencegah penyambungan kembali. Operasi pemutusan hanya menghentikan koneksi saat ini dan tidak mencegah koneksi terhubung kembali. Jika Anda perlu mencegah koneksi ulang, pertimbangkan untuk menerapkan logika sisi klien atau menonaktifkan kredensi perangkat.

Batas tarif berlaku untuk API sebagai bagian dari pembatasan tarif AWS IoT Core API standar. Saat merencanakan operasi pemutusan massal, pastikan Anda memperhitungkan batasan ini dan menerapkan logika coba ulang dan strategi batching yang sesuai untuk menghindari pelambatan. Untuk informasi lebih lanjut, lihat [AWS IoT Core kuota dan titik akhir](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#message-broker-limits).

#### Tanggapan kesalahan
<a name="delete-connection-errors"></a>

`DeleteConnection`API dapat mengembalikan respons kesalahan berikut:

InvalidRequestException  
Permintaan tidak valid. Ini dapat terjadi jika format ID klien tidak valid, berisi awalan tanda dolar (\$1), atau jika parameter yang diperlukan tidak ada.

ResourceNotFoundException  
ID klien yang ditentukan tidak ada atau saat ini tidak terhubung, dan tidak memiliki sesi persisten.

UnauthorizedException  
Anda tidak berwenang untuk melakukan operasi ini. Pastikan Anda memiliki `iot:DeleteConnection` izin yang diperlukan.

ForbiddenException  
Penelepon tidak berwenang untuk membuat permintaan. Hal ini mungkin terjadi karena izin IAM yang tidak mencukupi atau pembatasan kebijakan berbasis sumber daya.

ThrottlingException  
Tarif melebihi batas. Kurangi frekuensi panggilan API Anda dan terapkan logika coba ulang yang sesuai dengan backoff eksponensial.

InternalFailureException  
Terjadi kesalahan tak terduga. Coba lagi permintaan setelah penundaan singkat.

ServiceUnavailableException  
Layanan untuk sementara tidak tersedia. Coba lagi permintaan setelah penundaan singkat.

# HTTPS mempublikasikan
<a name="http"></a>

Klien dapat mempublikasikan pesan dengan membuat permintaan ke REST API menggunakan protokol HTTP 1.0 atau 1.1. Untuk otentikasi dan pemetaan port yang digunakan oleh permintaan HTTP, lihat. [Protokol, pemetaan port, dan otentikasi](protocols.md#protocol-mapping)

**catatan**  
HTTPS tidak mendukung `clientId` nilai seperti yang dilakukan MQTT. `clientId`tersedia saat menggunakan MQTT, tetapi tidak tersedia saat menggunakan HTTPS.

## URL pesan HTTPS
<a name="httpurl"></a>

Perangkat dan klien mempublikasikan pesan mereka dengan membuat permintaan POST ke titik akhir khusus klien dan URL khusus topik:

```
https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1
```
+  *IoT\$1data\$1endpoint*adalah [titik akhir data AWS IoT perangkat](iot-connect-devices.md#iot-connect-device-endpoints). Anda dapat menemukan titik akhir di AWS IoT konsol di halaman detail benda atau di klien dengan menggunakan AWS CLI perintah: 

  ```
  aws iot describe-endpoint --endpoint-type iot:Data-ATS
  ```

   Titik akhir akan terlihat seperti ini: `a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com` 
+ *url\$1encoded\$1topic\$1name*adalah [nama topik](topics.md#topicnames) lengkap dari pesan yang dikirim.

## Contoh kode pesan HTTPS
<a name="codeexample"></a>

Ini adalah beberapa contoh cara mengirim pesan HTTPS ke AWS IoT.

------
#### [ Python (port 8443) ]

```
import requests
import argparse

# define command-line parameters
parser = argparse.ArgumentParser(description="Send messages through an HTTPS connection.")
parser.add_argument('--endpoint', required=True, help="Your AWS IoT data custom endpoint, not including a port. " +
                                                      "Ex: \"abcdEXAMPLExyz-ats.iot.us-east-1.amazonaws.com\"")
parser.add_argument('--cert', required=True, help="File path to your client certificate, in PEM format.")
parser.add_argument('--key', required=True, help="File path to your private key, in PEM format.")
parser.add_argument('--topic', required=True, default="test/topic", help="Topic to publish messages to.")
parser.add_argument('--message', default="Hello World!", help="Message to publish. " +
                                                      "Specify empty string to publish nothing.")

# parse and load command-line parameter values
args = parser.parse_args()

# create and format values for HTTPS request
publish_url = 'https://' + args.endpoint + ':8443/topics/' + args.topic + '?qos=1'
publish_msg = args.message.encode('utf-8')

# make request
publish = requests.request('POST',
            publish_url,
            data=publish_msg,
            cert=[args.cert, args.key])

# print results
print("Response status: ", str(publish.status_code))
if publish.status_code == 200:
        print("Response body:", publish.text)
```

------
#### [ Python (port 443) ]

```
import requests
import http.client
import json
import ssl

ssl_context = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_CLIENT)
ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2

# note the use of ALPN
ssl_context.set_alpn_protocols(["x-amzn-http-ca"])
ssl_context.load_verify_locations(cafile="./<root_certificate>")

# update the certificate and the AWS endpoint
ssl_context.load_cert_chain("./<certificate_in_PEM_Format>", "<private_key_in_PEM_format>")
connection = http.client.HTTPSConnection('<the ats IoT endpoint>', 443, context=ssl_context)
message = {'data': 'Hello, I'm using TLS Client authentication!'}
json_data = json.dumps(message)
connection.request('POST', '/topics/device%2Fmessage?qos=1', json_data)

# make request
response = connection.getresponse()

# print results
print(response.read().decode())
```

------
#### [ CURL ]

Anda dapat menggunakan [curl](https://curl.haxx.se) dari klien atau perangkat untuk mengirim pesan ke AWS IoT.

**Untuk menggunakan curl untuk mengirim pesan dari perangkat AWS IoT klien**

1. Periksa **curl** versinya.

   1. Pada klien Anda, jalankan perintah ini pada command prompt.

      **curl --help**

      Dalam teks bantuan, cari opsi TLS. Anda harus melihat `--tlsv1.2` opsi.

   1. Jika Anda melihat `--tlsv1.2` opsi, lanjutkan.

   1. Jika Anda tidak melihat `--tlsv1.2` opsi atau Anda mendapatkan `command not found` kesalahan, Anda mungkin perlu memperbarui atau menginstal curl pada klien Anda atau menginstal `openssl` sebelum melanjutkan.

1. Instal sertifikat pada klien Anda.

   Salin file sertifikat yang Anda buat saat Anda mendaftarkan klien Anda (benda) di AWS IoT konsol. Pastikan Anda memiliki tiga file sertifikat ini di klien Anda sebelum melanjutkan.
   + File sertifikat CA (*Amazon-root-CA-1.pem*dalam contoh ini).
   + File sertifikat klien (*device.pem.crt*dalam contoh ini).
   + File kunci pribadi klien (*private.pem.key*dalam contoh ini).

1. Buat baris **curl** perintah, ganti nilai yang dapat diganti untuk akun dan sistem Anda.

   ```
   curl --tlsv1.2 \
       --cacert Amazon-root-CA-1.pem \
       --cert device.pem.crt \
       --key private.pem.key \
       --request POST \
       --data "{ \"message\": \"Hello, world\" }" \
       "https://IoT_data_endpoint:8443/topics/topic?qos=1"
   ```  
--tlsv1.2  
Gunakan TLS 1.2 (SSL).  
--cacert *Amazon-root-CA-1.pem*  
Nama file dan jalur, jika perlu, dari sertifikat CA untuk memverifikasi rekan.  
--sertifikat *device.pem.crt*  
Nama file sertifikat klien dan jalur, jika perlu.  
--kunci *private.pem.key*  
Nama file kunci pribadi klien dan jalur, jika perlu.  
--permintaan POST  
Jenis permintaan HTTP (dalam hal ini, POST).  
--data "” *\$1 \$1"message\$1": \$1"Hello, world\$1" \$1*  
Data HTTP POST yang ingin Anda publikasikan. Dalam hal ini, ini adalah string JSON, dengan tanda kutip internal lolos dengan karakter garis miring terbalik (\$1).  
“https: *IoT\$1data\$1endpoint* //:8443/topik/? *topic* qos=1"  
URL titik akhir data AWS IoT perangkat klien Anda, diikuti oleh port HTTPS`:8443`, yang kemudian diikuti oleh kata kunci, `/topics/` dan nama topik`topic`, dalam hal ini. Tentukan Kualitas Layanan sebagai parameter kueri,`?qos=1`.

1. Buka klien pengujian MQTT di konsol. AWS IoT 

   Ikuti petunjuk [Lihat pesan MQTT dengan klien MQTT AWS IoT](view-mqtt-messages.md) dan konfigurasikan konsol untuk berlangganan pesan dengan nama topik yang *topic* digunakan dalam **curl** perintah Anda, atau gunakan filter topik wildcard dari`#`.

1. Uji perintahnya.

   Saat memantau topik di klien pengujian AWS IoT konsol, buka klien Anda dan keluarkan baris perintah curl yang Anda buat di langkah 3. Anda akan melihat pesan klien Anda di konsol.

------