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-nya, tanpa mengharuskan perangkat untuk berlangganan topik.

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

Pesan langsung tidak diproses oleh A AWS IoT turan untuk eksekusi aturan, tidak mengantri 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 pengirim dapat mengirim 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 Pesan Langsung 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 dari klien MQTT untuk mengirim pesan. ID klien tidak boleh melebihi 128 karakter dan tidak dapat dimulai dengan tanda dolar ($). ID klien MQTT harus dikodekan URL (dikodekan persen) ketika berisi karakter yang tidak valid dalam permintaan HTTP, seperti spasi, garis miring maju (/), dan karakter. UTF-8 Untuk informasi selengkapnya, lihat batas dan kuota broker AWS IoT Core pesan dan protokol.

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

  • confirmationadalah Boolean. Ketika diset true el ke, 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 mengembalikan HTTP 504.

  • timeoutadalah bilangan bulat yang mewakili waktu maksimum, dalam detik, untuk menunggu konfirmasi pengiriman (PUBACK) dari klien penerima setelah pesan dikirim. Parameter ini hanya digunakan bila confirmation disetel ketrue. Jika confirmation yafalse, parameter ini diabaikan. Total waktu respons API mungkin lebih tinggi dari nilai ini karena pemrosesan internal. Atur 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. Akti AWS IoT Core CloudWatch fkan 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 diminta denganconfirmation=true, ini menunjukkan penerima telah mengakui penerimaan pesan. Jika tidak, ini menunjukkan pesan berhasil dikirim.
400 Permintaan Buruk Ini berarti salah satu parameter tidak valid. Tinjau pesan respon 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 dan topik target, atau kebijakan penerima tidak memberikan persetujuan iot:Receive pada topik tersebut. Tinjau pesan respon HTTP atau CloudWatch log untuk mengidentifikasi kegagalan tertentu, dan perbarui kebijakan yang sesuai. Lihat Contoh kebijakan pengiriman pesan langsung.
404 Tidak Ditemukan Ini berarti ID klien target tidak terhubung ke AWS IoT Core. Tinjau pesan respon 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 offline.
413 Muatan Terlalu Besar Muatan melebihi ukuran maksimum yang diizinkan. Kurangi ukuran muatan dan coba lagi. Lihat AWS IoT Core kuota layanan.
429 Terlalu Banyak Permintaan Ini berarti akun telah melampaui batas permintaan SendDirectMessage per detik atau koneksi penerima telah melampaui batas publikasi keluar. Tinjau pesan respon HTTP atau CloudWatch log untuk alasan tertentu, kurangi tingkat permintaan dan terapkan backoff eksponensial. Lihat AWS IoT Core kuota layanan.
500 Kesalahan Server Internal Ini menunjukkan kesalahan sisi server yang tidak terduga. Coba lagi permintaan dengan mundur eksponensial. Jika masalah berlanjut, hubungi AWS Dukungan dengan TraceID dari tanggapan.
504 Batas Waktu Gateway 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 pada topik yang tidak secara eksplisit berlangganan — Pesan langsung penerima dapat mengirimkan pesan ke topik yang belum secara eksplisit berlangganan 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 telah berlangganan penerima. Untuk menerima pesan langsung pada topik apa pun, verifikasi bahwa pengendali pesan klien Anda memproses pesan terlepas dari status langganan.

  • Menangani QoS yang ditentukan oleh API — Tingkat QoS dari pesan yang dikirimkan diatur oleh confirmation parameter dalam permintaan API pengirim, bukan oleh langganan penerima. Kapanconfirmation=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.