View a markdown version of this page

Pesan Langsung - AWS IoT Core

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

Pesan Langsung

AWS IoT Core sekarang mendukung Direct Messaging. Anda dapat mengirim pesan ke satu perangkat yang terhubung dengan ID klien MQTT, tanpa mengharuskan perangkat untuk berlangganan topik.

Sebelumnya, mengirim pesan ke perangkat tertentu memerlukan penerbitan ke topik yang dilanggani perangkat, tanpa cara bawaan untuk mengonfirmasi pengiriman. Pengirim memanggil SendDirectMessage HTTP API, menentukan ID klien penerima dan topik target. Kapanconfirmation=true, AWS IoT Core kirimkan di QoS 1 dan menunggu PUBACK penerima sebelum mengembalikan respons yang berhasil. Ini memberi Anda pengakuan pengiriman ujung ke ujung. Respons API dan Amazon CloudWatch Logs memberikan visibilitas penuh ke status pengiriman dan alasan kegagalan.

Pesan langsung tidak diproses oleh AWS IoT Aturan untuk eksekusi aturan, tidak antri untuk perangkat offline, dan tidak mendukung pesan yang disimpan.

Prasyarat

Baik pengirim maupun penerima memerlukan tindakan kebijakan khusus untuk menggunakan pesan langsung. Pengirim harus memiliki iot:SendDirectMessage izin. ID klien target ditentukan sebagai sumber daya dan kunci iot:Topic kondisi (opsional) membatasi topik mana yang dapat dikirim oleh pengirim pesan langsung. Penerima harus memiliki iot:Receive izin pada topik target. Penerima tidak memerlukan iot:Subscribe izin — AWS IoT Core mengirimkan pesan langsung tanpa memerlukan langganan topik. Untuk detail selengkapnya dan contoh kebijakan, lihatContoh kebijakan pengiriman pesan langsung.

Untuk otentikasi dan pemetaan port yang digunakan oleh permintaan HTTP, lihat. Protokol, pemetaan port, dan otentikasi

SendDirectMessage API

Pengirim dapat mengirim Direct Message dengan membuat permintaan HTTP POST ke URL khusus klien:

https://IoT_data_endpoint/connections/client_id/messages?topic=topic_name&confirmation=true&timeout=10
  • IoT_data_endpointadalah titik akhir data AWS IoT perangkat. Lihat AWS IoT data perangkat dan titik akhir layanan untuk menemukan titik akhir Anda.

  • client_idadalah pengidentifikasi unik klien MQTT untuk mengirim pesan ke. ID klien tidak boleh melebihi 128 karakter dan tidak dapat memulai dengan tanda dolar ($). ID klien MQTT harus dikodekan URL (persen dikodekan) ketika berisi karakter yang tidak valid dalam permintaan HTTP, seperti spasi, garis miring maju (/), dan karakter. UTF-8 Untuk informasi lebih lanjut, lihat broker AWS IoT Core pesan dan batas protokol dan kuota.

  • topic_nameadalah topik di mana penerima menerima pesan, URL-encoded. Tidak harus dimulai dengan $. Tidak boleh menjadi Topik AWS IoT Core Cadangan. Lihat halaman kuota AWS IoT Core layanan untuk panjang topik dan batas kedalaman. Untuk informasi lebih lanjut, lihat broker AWS IoT Core pesan dan batas protokol dan kuota.

  • confirmationadalah Boolean. Saat disetel ketrue, API mengirimkan pesan di QoS 1 dan menunggu klien MQTT mengirim konfirmasi pengiriman (PUBACK) sebelum mengembalikan respons yang berhasil. Jika konfirmasi pengiriman tidak diterima dalam periode batas waktu yang ditentukan, API akan mengembalikan HTTP 504.

  • timeoutadalah bilangan bulat yang mewakili waktu maksimum, dalam hitungan detik, untuk menunggu konfirmasi pengiriman (PUBACK) dari klien penerima setelah pesan dikirim. Parameter ini hanya digunakan ketika confirmation diatur ketrue. Jika confirmation yafalse, parameter ini diabaikan. Total waktu respons API mungkin lebih tinggi dari nilai ini karena pemrosesan internal. Tetapkan batas waktu klien HTTP Anda ke nilai yang lebih besar dari parameter ini.

Kode status respons API

Tabel berikut mencantumkan kode status HTTP yang dikembalikan oleh SendDirectMessage API dan tindakan yang disarankan untuk masing-masing. Aktifkan AWS IoT Core CloudWatch log untuk melihat log SendDirectMessage peristiwa terperinci termasuk bidang alasan untuk penanganan kesalahan terprogram.

SendDirectMessage Kode status respons API
Kode HTTP Tindakan yang disarankan
200 OK Jika konfirmasi pengiriman dimintaconfirmation=true, ini menunjukkan penerima telah mengakui tanda terima pesan. Jika tidak, ini menunjukkan pesan berhasil dikirim.
400 Permintaan Buruk Ini berarti salah satu parameter tidak valid. Tinjau pesan respons HTTP atau CloudWatch log untuk mengidentifikasi kegagalan dan perbaikan tertentu. Pastikan nama topik dan Client-id valid dan URL-encoded benar.
403 Dilarang Ini berarti kebijakan pengirim tidak memberikan iot:SendDirectMessage pada klien target dan topik, atau kebijakan penerima tidak mengabulkan iot:Receive topik tersebut. Tinjau pesan atau CloudWatch log respons HTTP untuk mengidentifikasi kegagalan tertentu, dan perbarui kebijakan terkait. Lihat Contoh kebijakan pengiriman pesan langsung.
404 Tidak Ditemukan Ini berarti ID klien target tidak terhubung ke AWS IoT Core. Tinjau pesan respons HTTP atau CloudWatch log untuk alasan tertentu, verifikasi penerima terhubung, dan coba lagi. Jika pesan respons menyatakan “ID klien target tidak terhubung, tetapi memiliki sesi persisten aktif,” klien target memiliki sesi persisten yang belum kedaluwarsa tetapi saat ini sedang offline.
413 Muatan Terlalu Besar Muatan melebihi ukuran maksimum yang diizinkan. Kurangi ukuran muatan dan coba lagi. Lihat kuota AWS IoT Core layanan.
429 Terlalu Banyak Permintaan Ini berarti akun telah melampaui batas SendDirectMessage permintaan per detik atau koneksi penerima telah melampaui batas publikasi keluar. Tinjau pesan respons HTTP atau CloudWatch log untuk alasan tertentu, kurangi tingkat permintaan, dan terapkan backoff eksponensial. Lihat kuota AWS IoT Core layanan.
500 Kesalahan Server Internal Ini menunjukkan kesalahan sisi server yang tidak terduga. Coba lagi permintaan dengan backoff eksponensial. Jika masalah berlanjut, hubungi AWS Support dengan traceID dari respons.
504 Batas Waktu Gerbang Ini berarti penerima tidak mengirim PUBACK dalam periode batas waktu yang ditentukan. Tingkatkan nilai batas waktu, verifikasi klien MQTT penerima mengirim PUBACK untuk pesan QoS 1, atau periksa apakah penerima memproses pesan secara perlahan.

Contoh

AWS CLI
aws iot-data send-direct-message \ --client-id myDevice \ --topic commands/reboot \ --confirmation \ --timeout 10 \ --payload '{"action": "reboot"}' \ --cli-binary-format raw-in-base64-out \ --region us-west-2 \ --endpoint-url https://IoT_data_endpoint

--cli-binary-formatOpsi ini diperlukan jika Anda menggunakan AWS Command Line Interface versi 2. Untuk menjadikan ini pengaturan default, jalankanaws configure set cli-binary-format raw-in-base64-out. Untuk informasi selengkapnya, lihat opsi baris perintah global yang AWS CLI didukung di Panduan AWS Command Line Interface Pengguna untuk Versi 2.

curl (X.509 client certificate, port 8443)
curl --tlsv1.2 \ --cacert Amazon-root-CA-1.pem \ --cert device.pem.crt \ --key private.pem.key \ --request POST \ --data '{"action": "reboot"}' \ "https://IoT_data_endpoint:8443/connections/myDevice/messages?topic=commands%2Freboot&confirmation=true&timeout=10"

Perilaku klien penerima

Direct Messaging mengirimkan pesan ke klien MQTT (penerima) tanpa memerlukan langganan topik. Untuk mendapatkan manfaat penuh dari Direct Messaging, penerima harus mendukung perilaku berikut:

  • Menerima pesan tentang topik yang tidak dilanggan secara eksplisit — Pesan langsung penerima dapat mengirimkan pesan ke topik yang belum dilanggan secara eksplisit oleh penerima. Namun, beberapa implementasi klien MQTT memfilter atau membuang pesan pada topik yang tidak berlangganan. Jika klien Anda membuang pesan-pesan ini, pesan langsung hanya akan berfungsi pada topik yang juga berlangganan penerima. Untuk menerima pesan langsung tentang topik apa pun, verifikasi bahwa penangan pesan klien Anda memproses pesan terlepas dari status langganan.

  • Menangani QoS yang ditentukan oleh API — Level QoS dari pesan yang dikirimkan diatur oleh confirmation parameter dalam permintaan API pengirim, bukan oleh langganan penerima. Ketikaconfirmation=true, pesan tiba di QoS 1 dan klien penerima harus mengirim PUBACK untuk mengakui pengiriman. Kapanconfirmation=false, pesan tiba di QoS 0 tanpa perlu pengakuan. Pastikan implementasi MQTT klien Anda menangani pesan masuk QoS 0 dan QoS 1 dengan benar.