View a markdown version of this page

MQTT - AWS IoT Core

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

MQTT

MQTT (Message Queuing Telemetry Transport) adalah protokol perpesanan 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 M QTT v5.0, dengan beberapa perbedaan, seperti yang didokumentasikan dalam. AWS IoT perbedaan dari spesifikasi MQTT Sebagai versi terbaru dari standar, MQTT 5 memperkenalkan beberapa fitur utama yang membuat MQTT-based sistem lebih kuat, termasuk peningkatan skalabilitas baru, peningkatan pelaporan kesalahan 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 5. AWS IoT Core juga mendukung komunikasi versi MQTT lintas (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. Men AWS IoT SDK Perangkat dukung kedua protokol dan merupakan cara yang disarankan untuk menghubungkan perangkat ke AWS IoT Core. SDK AWS IoT Perangkat mendukung fungsi yang diperlukan untuk perangkat dan klien untuk terhubung dan mengakses AWS IoT layanan. SDK Perangkat mendukung protokol otentikasi yang diperlukan AWS IoT layanan dan persyaratan ID koneksi yang diperlukan protokol MQTT dan MQTT melalui protokol WSS. Untuk informasi tentang cara menyamb AWS IoT ung menggunakan AWS SDK Perangkat dan tautan ke contoh AWS IoT dalam bahasa yang didukung, lihatMenghubungkan dengan MQTT menggunakan AWS IoT SDK Perangkat. Untuk informasi selengkapnya tentang metode otentikasi dan pemetaan port untuk pesan MQTT, lihat. Protokol, pemetaan port, dan otentikasi

Meskipun kami merekomendasikan menggunakan AWS IoT SDK Perangkat untuk terhubung AWS IoT, mereka tidak diperlukan. Namun, jika Anda tidak menggunakan SDK AWS IoT Perangkat, Anda harus menyediakan koneksi dan keamanan komunikasi yang diperlukan. Klien harus mengirim ekstensi TLS Indikasi Nama Server (SNI) dalam permintaan koneksi. Upaya koneksi yang tidak menyertakan SNI ditolak. Untuk informasi selengkapnya, lihat Keamanan Transportasi di AWS IoT. Klien yang menggunakan pengguna dan AWS kredentif IAM untuk mengotentikasi klien harus memberikan otentikasi Tanda Tangan Versi 4 yang benar.

Setelah klien Anda terhubung, Anda dapat memantau dan mengelola koneksi klien MQTT mereka menggunakan konsol atau API. Untuk informasi selengkapnya, lihat Manajemen koneksi MQTT.

Menghubungkan dengan MQTT menggunakan AWS IoT SDK Perangkat

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

catatan

AWS IoT Perangkat SDK telah merilis klien MQTT 5.

C++

Menggunakan AWS IoT C++ Device SDK untuk menghubungkan perangkat

Python

Menggunakan AWS IoT Device SDK untuk Python untuk menghubungkan perangkat

JavaScript

Menggunakan AWS IoT Device SDK JavaScript untuk menghubungkan perangkat

Java

Menggunakan AWS IoT Device SDK untuk Java untuk menghubungkan perangkat

catatan

Dev AWS IoT ice SDK untuk Java v2 sekarang mendukung pengembangan Android. Untuk informasi selengkapnya, lihat AWS IoT Device SDK untuk Android.

Embedded C

Menggunakan AWS IoT Device SDK untuk Embedded C untuk menghubungkan perangkat

penting

SDK ini dimaksudkan untuk digunakan oleh pengembang perangkat lunak tertanam berpengalaman.

Opsi Kualitas Layanan (QoS) MQTT

AWS IoT dan AWS IoT Device SDK mendukung level MQTT Quality of Service (QoS) dan. 01 Protokol MQTT mendefinisikan tingkat ketiga QoS, level2, tetapi AWS IoT tidak mendukungnya. 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 mempengaruhi pesan yang diterbitkan ke dan oleh broker pesan.

Dengan tingkat QoS...

Pesannya adalah...

Komentar

Tingkat QoS 0

Dikirim nol kali atau lebih

Level ini harus digunakan untuk pesan yang dikirim melalui tautan komunikasi yang andal atau yang dapat dilewatkan tanpa masalah.

Tingkat QoS 1

Dikirim setidaknya satu kali, dan kemudian berulang kali sampai PUBACK respons diterima

Pesan tidak dianggap lengkap sampai pengirim menerima tang PUBACK gapan untuk menunjukkan pengiriman berhasil.

Sesi persisten MQTT

Sesi persisten menyimpan langganan dan pesan klien, dengan Kualitas Layanan (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 dicatat dalam CloudWatch metrik dan CloudWatch Log. Untuk informasi tentang entri yang ditulis ke CloudWatch dan CloudWatch Log, lihat Metrik broker pesan danEntri log yang diantri.

Membuat sesi persisten

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

Di MQTT 5, Anda menangani sesi persisten dengan mengatur Clean Start flag danSession 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. Ketika Anda meny Clean Start et 0 el =, sesi penghubung melanjutkan sesi sebelumnya jika ada. Interval Kedaluwarsa Sesi mengontrol akhir sesi penghubung. Interval Kedaluwarsa Sesi menentukan waktu, dalam detik (bilangan bulat 4-byte), bahwa sesi akan bertahan setelah pemutusan. 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 Mempertahankan sesi.
Session Expiry interval= 0 Tidak bertahan dalam sesi.

Di MQTT 5, jika Anda mengatur Clean Start = 1 dan Session Expiry Interval =0, ini setara dengan sesi bersih MQTT 3. Jika Anda meny Clean Start etel = 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

Klien menggunakan sessionPresent atribut dalam pesan koneksi (CONNACK) untuk menentukan apakah sesi persisten hadir. Jika sessionPresent ya1, sesi persisten hadir dan pesan yang disimpan untuk klien dikirimkan ke klien setelah klien menerimaCONNACK, seperti yang dijelaskan dalam Lalu lintas pesan setelah koneksi ulang ke sesi persisten. Jika sessionPresent ya1, klien tidak perlu berlangganan kembali. Namun, jika sessionPresent ada0, 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

Sesi persisten mewakili koneksi berkelanjutan antara klien dan broker pesan MQTT. Ketika klien terhubung ke broker pesan menggunakan sesi persisten, broker pesan menyimpan semua langganan yang dilakukan klien selama koneksi. Ketika klien terputus, broker pesan menyimpan pesan QoS 1 yang tidak diakui dan pesan QoS 1 baru yang diterbitkan ke topik yang berlangganan 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. Ketika klien terhubung kembali ke sesi persisten, 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 sampai Publish requests per second per connection 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 diantri jika setidaknya satu pelanggan grup menggunakan sesi persisten dan tidak ada pelanggan yang online untuk menerima pesan QoS 1. De-antrian pesan dilakukan pada kecepatan maksimum 20 pesan per detik per pelanggan aktif dalam grup. Untuk informasi selengkapnya, lihat antrian pesan langganan bersama.

Mengakhiri sesi persisten

Sesi persisten dapat berakhir dengan 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 penghentian waktu koneksi.

  • Klien mengirim CONNECT pesan yang menetapkan ben cleanSession dera ke1.

  • Anda memutuskan koneksi klien secara manual dan menghapus sesi menggunakan konsol atau DeleteConnection API. Untuk informasi selengkapnya, lihat Manajemen koneksi MQTT.

Di MQTT 3, nilai default 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 dari sesi saat ini.

catatan

Pesan tersimpan yang menunggu untuk dikirim ke klien ketika sesi berakhir dibuang; Namun, mereka masih ditagih pada tarif pesan standar, meskipun mereka tidak dapat dikirim. Untuk informasi selengkapnya tentang harga pesan, lihat AWS IoT Core Harga. Anda dapat mengonfigurasi interval waktu kedaluwarsa.

Koneksi ulang setelah sesi persisten telah kedaluwarsa

Jika klien tidak menyambung kembali ke sesi persisten sebelum kedaluwarsa, sesi berakhir dan pesan yang disimpan akan dibuang. Ketika klien menyambung kembali setelah sesi berakhir dengan tanda cleanSession ke0, layanan membuat sesi persisten baru. Setiap langganan atau pesan dari sesi sebelumnya tidak tersedia untuk sesi ini karena telah dibuang saat sesi sebelumnya berakhir.

Biaya pesan sesi persisten

Pesan dibebankan kepada Anda Akun AWS ketika broker pesan mengirim pesan ke klien atau sesi persisten offline. Saat perangkat offline dengan sesi persisten menyambung kembali dan melanjutkan sesinya, pesan yang disimpan dikirim ke perangkat dan dibebankan ke akun Anda lagi. Untuk informasi selengkapnya tentang harga pesan, lihat AWS IoT Core harga - Pesan.

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 Kuota Layanan.

Pesan yang dipertahankan MQTT

AWS IoT Core mendukung ben RETAIN dera yang dijelaskan dalam protokol MQTT. Ketika klien menetapkan RETAIN bendera pada pesan MQTT yang diterbitkan, AWS IoT Core menyimpan pesan tersebut. Kemudian dapat dikirim ke pelanggan baru, diambil dengan memanggil GetRetainedMessage operasi, dan dilihat di AWS IoT konsol.

Contoh penggunaan 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 MQTT yang dipertahankan segera setelah berlangganan, Anda dapat menerbitkan pesan konfigurasi dengan set RETAIN bendera. Klien yang berlangganan juga menerima pembaruan untuk konfigurasi tersebut 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. Ketika 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.

Tugas umum dengan pesan yang dipertahankan MQTT di AWS IoT Core

AWS IoT Core menyimpan pesan MQTT dengan set RETAIN bendera. 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 untuk topik tersebut.

Pesan yang disimpan MQTT memerlukan tindakan kebijakan khusus untuk mengotorisasi klien untuk mengaksesnya. Untuk contoh penggunaan kebijakan pesan yang dipertahankan, lihatContoh kebijakan pesan yang dipertahankan.

Bagian ini menjelaskan operasi umum yang melibatkan pesan yang disimpan.

  • Membuat pesan yang dipertahankan

    Klien menentukan apakah pesan dipertahankan ketika menerbitkan pesan MQTT. Klien dapat mengatur RETAIN bendera saat mereka menerbitkan pesan dengan menggunakan Device SDK. Aplikasi dan layanan dapat mengatur RETAIN bendera ketika mereka menggunakan Publish tindakan untuk menerbitkan pesan MQTT.

    Hanya satu pesan per nama topik yang dipertahankan. Pesan baru dengan set bendera RETAIN yang diterbitkan ke topik menggantikan pesan yang disimpan yang sudah ada yang dikirim ke topik sebelumnya.

    catatan

    Anda tidak dapat mempublikasikan ke topik yang dicadangkan dengan ben RETAIN dera yang ditetapkan.

  • Berlangganan ke topik pesan yang dipertahankan

    Klien berlangganan topik pesan yang dipertahankan seperti topik pesan MQTT lainnya. Pesan yang dipertahankan yang diterima dengan berlangganan topik pesan yang dipertahankan memiliki RETAIN bendera yang ditetapkan.

    Pesan yang dipertahankan dihapus dari AWS IoT Core saat klien menerbitkan pesan yang dipertahankan 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 wildcard yang menyertakan topik pesan yang dipertahankan memungkinkan klien menerima pesan berikutnya tentang topik tersebut. Namun, pesan yang disimpan tidak dikirimkan pada waktu berlangganan.

    catatan

    Untuk menerima pesan yang dipertahankan setelah berlangganan, filter topik dalam permintaan berlangganan harus sama persis dengan topik pesan yang dipertahankan.

    Pesan yang dipertahankan yang diterima saat berlangganan topik pesan yang dipertahankan memiliki RETAIN bendera yang ditetapkan. Pesan yang disimpan yang diterima oleh klien yang 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 dapat menerima pesan yang disimpan setelah berlangganan, ia 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 membuat daftar dan mengambil pesan yang disimpan dengan menelepon ListRetainedMessages dan GetRetainedMessage.

    Klien tidak dicegah untuk menerbitkan pesan ke topik pesan yang dipertahankan tanpa menetapkan 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 ditetapkan dan pesan yang dipertahankan kedaluwarsa, pelanggan baru yang berlangganan topik tersebut tidak akan menerima pesan yang dipertahankan setelah berlangganan berhasil.

  • Mendaftarkan topik pesan yang dipertahankan

    Anda dapat membuat daftar pesan yang dipertahankan dengan menelepon ListRetainedMessages dan pesan yang disimpan dapat dilihat di AWS IoT konsol.

  • Mendapatkan detail pesan yang dipertahankan

    Anda bisa mendapatkan detail pesan yang dipertahankan dengan menelepon GetRetainedMessage dan mereka dapat dilihat di AWS IoT konsol.

  • Mempertahankan pesan Will

    Pesan MQTT Will yang dibuat saat perangkat terhubung dapat dipertahankan dengan menyetel Will Retain bendera di Connect Flag bits bidang.

  • Menghapus pesan yang disimpan

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

    Pesan yang disimpan juga dapat dihapus secara interaktif dengan mengakses pesan yang disimpan di AWS IoT konsol. Pesan yang disimpan yang dihapus dengan menggunakan AWS IoT konsol juga mengirim pesan 0-byte ke klien yang telah berlangganan topik pesan yang disimpan.

    Pesan yang disimpan tidak dapat dipulihkan setelah dihapus. Klien perlu menerbitkan pesan baru yang dipertahankan untuk menggantikan pesan yang dihapus.

  • Debugging dan pemecahan masalah pesan yang dipertahankan

    Kon AWS IoT sol menyediakan beberapa alat untuk membantu Anda memecahkan masalah pesan yang disimpan:

    • Bagian Pesan yang dipertahankan halaman

      Halaman Pesan yang dipertahankan di AWS IoT konsol menyediakan daftar halaman 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.

    • Bagian Klien pengujian MQTT

      Halaman klien uji MQTT di AWS IoT konsol dapat berlangganan dan menerbitkan topik MQTT. Opsi publikasi memungkinkan Anda menyetel tanda RETAIN pada pesan yang Anda publikasikan untuk mensimulasikan bagaimana perangkat Anda mungkin berperilaku. Anda juga dapat menggunakan klien uji MQTT untuk memantau pesan dari klien terhubung yang Anda kelola melalui antarmuka koneksi klien. Untuk informasi selengkapnya tentang mengelola koneksi klien, lihatManajemen koneksi MQTT.

    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 dipertahankan, AWS IoT Core mengembalikan respons yang dibatasi untuk pesan yang diterbitkan dengan RETAIN set dan payload yang lebih besar dari 0 byte sampai 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

Menerbitkan pesan dengan RETAIN bendera yang ditetapkan dari klien, dengan menggunakan AWS IoT konsol, atau dengan menelepon akan Publish dikenakan biaya pengiriman pesan tambahan yang dijelaskan dalam AWS IoT Core Harga - Pesan.

Mengambil pesan yang disimpan oleh klien, dengan menggunakan AWS IoT konsol, atau dengan menelep GetRetainedMessage on akan dikenakan biaya pengiriman pesan selain biaya penggunaan API normal. Biaya tambahan dijelaskan dalam AWS IoT Core harga - Pesan.

MQTT Akan pesan yang dipublikasikan saat perangkat terputus secara tidak terduga dikenakan biaya pengiriman pesan yang dijelaskan dalam AWS IoT Core harga - Pesan.

Untuk informasi selengkapnya tentang biaya pengiriman pesan, lihat AWS IoT Core harga - Pesan.

Membandingkan pesan yang dipertahankan MQTT dan sesi persisten MQTT

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

Pesan yang dipertahankan

Sesi persisten

Fitur utama

Pesan yang disimpan dapat digunakan untuk mengonfigurasi atau memberi tahu kelompok besar perangkat setelah mereka 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 offline.

Contoh

Pesan yang disimpan dapat memberikan informasi konfigurasi perangkat tentang lingkungan mereka saat online. Konfigurasi awal dapat mencakup daftar topik pesan lain yang harus berlangganan atau informasi tentang cara mengonfigurasi 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 pada langganan awal ke suatu topik

Setelah berlangganan topik dengan pesan yang dipertahankan, pesan tersimpan terbaru diterima.

Setelah berlangganan topik tanpa pesan yang disimpan, tidak ada pesan yang diterima sampai satu 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 dipertahankan, pesan tersimpan terbaru diterima.

Semua pesan yang diterbitkan dengan QOS = 1 dan berlangganan dengan QOS = 1 saat perangkat terputus dikirim setelah perangkat terhubung kembali.

Data/session kedaluwarsa

Di MQTT 3, pesan yang disimpan tidak kedaluwarsa. Mereka disimpan sampai diganti atau dihapus. Di MQTT 5, pesan yang dipertahankan kedaluwarsa setelah Interval Kedaluwarsa Pesan yang Anda tetapkan. Untuk informasi selengkapnya, lihat Ked aluwarsa Pesan.

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 dikirimkan. Untuk informasi selengkapnya tentang kedaluwarsa sesi dengan sesi persisten, lihatSesi persisten MQTT.

Untuk informasi tentang sesi persisten, lihatSesi persisten MQTT.

Dengan Pesan Tersimpan, klien penerbitan menentukan apakah pesan harus dipertahankan dan dikirim ke perangkat setelah terhubung, 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 yang akan datang 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 dipertahankan, AWS IoT Core mengembalikan respons yang dibatasi untuk pesan yang diterbitkan dengan RETAIN set dan payload yang lebih besar dari 0 byte sampai beberapa pesan yang disimpan dihapus dan jumlah pesan yang dipertahankan turun di bawah batas.

MQTT menyimpan pesan dan AWS IoT Bayangan Perangkat

Pesan yang disimpan dan Bayangan Perangkat menyimpan data dari perangkat, tetapi mereka 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 payload pesannya.

AWS IoT mendukung struktur data tertentu.

Memperbarui payload pesan menghasilkan pesan acara

Menerbitkan pesan yang disimpan mengirimkan pesan ke klien yang berlangganan, tetapi tidak menghasilkan pesan pembaruan tambahan.

Memperbarui Device Shadow menghasilkan pesan pembaruan yang menggambarkan perubahan.

Pembaruan pesan diberi nomor

Pesan yang disimpan tidak diberi nomor secara otomatis. Dokumen Device Shadow memiliki nomor versi otomatis dan stempel waktu.

Payload 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 individu dari dokumen Device Shadow dapat diperbarui tanpa perlu memperbarui seluruh dokumen Device Shadow.

Klien menerima data pesan setelah berlangganan

Klien secara otomatis menerima pesan yang dipertahankan setelah berlangganan topik dengan pesan yang dipertahankan.

Klien dapat berlangganan pembaruan Device Shadow, tetapi mereka harus meminta status saat ini dengan sengaja.

Pengindeksan dan penelusuran

Pesan yang disimpan tidak diindeks untuk pencarian.

Indeks Armada mengindeks data Device Shadow untuk pencarian dan agregasi.

Pesan Last Will and Testament (LWT) MQTT

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 mengirim ke semua klien yang berlangganan topik ketika pemutusan yang belum diketahui 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 mengatur Will Retain bendera di Connect Flag bits bidang selama koneksi. Misalnya, jika Will Retain bendera disetel ke1, Pesan Will akan disimpan di broker di Topik Will terkait. Untuk informasi selengkapnya, lihat Will Messages.

Saat mengelola koneksi klien, Anda dapat mengontrol apakah pesan LWT dipublikasikan saat Anda memutuskan koneksi klien. Untuk informasi selengkapnya, lihat Manajemen koneksi MQTT.

Broker akan menyimpan Pesan Will sampai terjadi pemutusan yang belum tahu. Ketika itu terjadi, broker akan mempublikasikan pesan ke semua klien yang berlangganan Will Topic 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, pesan LWT tidak dijamin akan dikirim secara berurutan selama koneksi ulang. Sebaiknya gunakan peristiwa siklus hidup untuk meningkatkan akurasi deteksi status konektivitas, karena peristiwa ini menyediakan atribut seperti cap waktu dan nomor versi untuk mengelola peristiwa yang tidak berurutan. Untuk daftar lengkap skenario pemutusan ketika broker akan mengirim pesan LWT, lihat Connect/Disconnect acara.

Menggunakan ConnectAttributes

ConnectAttributesmemungkinkan Anda untuk menentukan atribut apa yang ingin Anda gunakan dalam pesan koneksi Anda di kebijakan IAM Anda seperti PersistentConnect danLastWill. DenganConnectAttributes, Anda dapat membuat kebijakan yang tidak memberikan akses perangkat ke fitur baru secara default, yang dapat membantu jika perangkat dikompromikan.

connectAttributesmendukung fitur-fitur berikut:

PersistentConnect

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

LastWill

Gunakan LastWill fitur ini untuk menerbitkan pesan ke LastWillTopic saat klien terputus secara tidak terduga.

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 jika Anda ingin memilikinya.

Saat mengelola koneksi klienmelalui konsol atau API, Anda dapat melihat atribut koneksi dan konfigurasi sesi untuk klien yang terhubung. Untuk informasi selengkapnya, lihat Manajemen koneksi MQTT.

Sebagai ConnectAttributes contoh, lihat Contoh Kebijakan Hubun gkan.

Fitur yang didukung MQTT 5

AWS IoT Core dukungan untuk MQTT 5 didasarkan pada spesifikasi MQTT v5.0 dengan beberapa perbedaan seperti yang didokumentasikan dalam. AWS IoT perbedaan dari spesifikasi MQTT

Langganan bersama

AWS IoT Core mendukung langganan bersama untuk MQTT 3.1.1 dan MQTT 5. Langganan bersama memungkinkan beberapa klien untuk berbagi langganan ke topik dan hanya satu klien yang akan menerima pesan yang dipublikasikan ke topik tersebut menggunakan distribusi acak. Langganan bersama dapat secara efektif memuat menyeimbangkan pesan MQTT di sejumlah pelanggan. Misalnya, Anda memiliki 1.000 perangkat yang menerbitkan ke 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 tersebut. 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 langganan bersama sebagai berikut:

$share/{ShareName}/{TopicFilter}
  • $shareadalah 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 UTF-8 karakter.

  • {TopicFilter}mengikuti sin taks filter topik yang sama dengan langganan non-bersama. Ukuran maksimum untuk {TopicFilter} adalah 256 UTF-8 karakter.

  • Dua garis miring (/) yang $share/{ShareName}/{TopicFilter} diperlukan untuk tidak termasuk dalam Jumlah maksimum garis miring dalam topik dan batas filter topik.

Langganan yang memiliki langganan yang sama {ShareName}/{TopicFilter} termasuk dalam grup langganan bersama yang sama. Anda dapat membuat beberapa grup langganan bersama dan tidak melebihi batas Lang ganan Bersama per grup. Untuk informasi selengkapnya, lihat AWS IoT Core titik akhir dan kuota dari Refer ensi AWS Umum.

Tabel berikut membandingkan langganan non-bersama dan langganan bersama:

Langganan Deskripsi Contoh filter topik
Non-shared langganan Setiap klien membuat langganan terpisah untuk menerima pesan yang dipublikasikan. Ketika pesan dipublikasikan ke topik, semua pelanggan topik tersebut menerima salinan pesan tersebut.
sports/tennis sports/#
Langganan bersama Beberapa klien dapat berbagi langganan ke topik dan hanya satu klien yang akan menerima pesan yang dipublikasikan ke topik itu dengan distribusi acak.
$share/consumer/sports/tennis $share/consumer/sports/#
Non-shared alur langganan Alur langganan bersama
Langganan reguler untuk MQTT 3 dan MQTT 5 in. AWS IoT Core
Langganan bersama untuk MQTT 3 dan MQTT 5 in. AWS IoT Core

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 batas Publikasikan permintaan per detik per koneksi, pesan QoS 1 yang tidak diakui dan pesan QoS 1 yang tidak terkirim yang diterbitkan ke grup langganan bersama akan mengantri. Untuk informasi selengkapnya, lihat antrian pesan langganan bersama.

  • Pesan QoS 0 yang dipublikasikan ke grup langganan bersama akan dihapus jika terjadi kegagalan.

  • Langganan bersama tidak menerima pesan yang dipertahankan saat berlangganan pola topik sebagai bagian dari grup pelanggan bersama. Pesan yang dipublikasikan pada topik yang memiliki pelanggan bersama dan memiliki tanda yang RETAIN ditetapkan akan dikirimkan ke pelanggan bersama seperti pesan publikasi lainnya.

  • Jika langganan bersama berisi karakter wildcard (# atau +), mungkin ada beberapa langganan bersama yang cocok untuk 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.

    Dalam contoh ini, ada tiga langganan bersama yang cocok untuk topik sports/tennis MQTT penerbitan. 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 Refer ensi AWS Umum. Untuk menguji langganan bersama menggunakan klien AWS IoT MQTT di AWS IoT konsol, lihatMenguji Langganan Bersama di klien MQTT. Anda juga dapat melihat topik yang berlangganan klien yang terhubung, termasuk langganan bersama, dengan menggunakan fitur manajemen koneksi klien. Untuk informasi selengkapnya, lihat Manajemen koneksi MQTT. Untuk informasi selengkapnya tentang langganan bersama, lihat Langganan Bersama dari MQTTv5.0 spesifikasi.

Antrian pesan langganan bersama

Untuk meningkatkan keandalan pengiriman pesan, langganan bersama menyertakan kemampuan antrian pesan yang menyimpan pesan saat tidak ada pelanggan online yang tersedia. Bila 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 diantri ketika tidak ada anggota yang ditemukan online atau ketika pelanggan melebihi batas. Publish requests per second per connection Pesan yang mengantri dikirimkan ketika anggota yang ada melanjutkan sesi persisten mereka, atau anggota baru bergabung dengan grup. Pesan antri dikirim hingga 20 pesan antri per detik per pelanggan grup aktif, bersama dengan pesan lain yang dikirimkan ke pelanggan sesuai langganan.

Secara default, retensi pesan yang diantri mengikuti ku Persistent Session expiry period ota. Namun, jika Interval Kedaluwarsa Pesan (MEI) diatur dalam pesan penerbitan masuk, MEI diutamakan. Ketika MEI hadir, ini menentukan periode penyimpanan pesan, terlepas dari periode kedaluwarsa Sesi Persisten.

Tarif antrian pesan dibatasi sesuai ku Queued messages per second per account ota, dan jumlah pesan dibatasi oleh ku Maximum number of queued messages per shared subscription group ota. Untuk melihat dan mengelola kuota Anda, akses konsol Kuota Layanan.

Anda dapat memantau Antrian CloudWatch dengan mencari ApproximateQueueDepth di bawah AWS/Usage namespace, atau Anda dapat menggunakan perintah CLI berikut untuk mencantumkan 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 mengantri sebelum mencapai batas yang dipertahankan. Pesan masuk baru yang akan melebihi batas dihilangkan. Sistem tidak mengganti pesan antri lama dengan yang lebih baru.

Antrian pesan dicatat dalam CloudWatch metrik dan CloudWatch Log. Untuk informasi tentang entri yang ditulis ke CloudWatch dan CloudWatch Log, lihat Metrik broker pesan danEntri log yang diantri. Pesan yang mengantri masih ditagih dengan tarif pesan standar. Untuk informasi selengkapnya tentang harga pesan, lihat AWS IoT Core Harga.

Siklus hidup sesi dalam grup langganan bersama

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

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

Mulai Bersih dan Kedaluwarsa Sesi

Anda dapat menggunakan Clean Start dan Session Expiration untuk menangani sesi persisten Anda dengan lebih fleksibel. Bendera Clean Start 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 saat pemutusan. Untuk informasi selengkapnya, lihat Sesi persisten MQTT.

Kode alasan pada semua ACK

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, Mengakui). Untuk informasi selengkapnya, lihat kode alasan MQTT. Untuk daftar lengkap kode alasan MQTT, lihat spesifikasi MQTT v5.

Alias topik

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 Refer ensi AWS Umum.

Kedaluwarsa pesan

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 menetapkan 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 pesan tersebut dialihkan ke pelanggan setelah 20 detik, bidang kedaluwarsa pesan akan diperbarui menjadi 10. Dimungkinkan bagi 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.

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

Dalam komunikasi lintas versi, perilaku kedaluwarsa pesan ditentukan oleh versi MQTT dari pesan penerbitan 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 bagaimana kedaluwarsa pesan mendukung jenis pesan publikasi berikut:

Publikasikan Jenis Pesan Interval Kedaluwarsa Pesan
Penerbitan Reguler Jika server gagal mengirimkan pesan dalam waktu yang ditentukan, pesan kedaluwarsa akan dihapus dan pelanggan tidak akan menerimanya. Ini termasuk situasi seperti ketika perangkat tidak mem-backup pesan QoS 1 mereka.
Mempertahankan Jika pesan yang disimpan kedaluwarsa dan klien baru berlangganan topik, klien tidak akan menerima pesan setelah berlangganan.
Kehendak Terakhir Interval untuk pesan terakhir akan dimulai setelah klien terputus dan server mencoba mengirimkan pesan will terakhir kepada pelanggannya.
Pesan yang diantri Jika QoS 1 keluar dengan Interval Kedaluwarsa Pesan berakhir saat klien offline, setelah sesi persisten dil anjutkan, klien tidak akan menerima pesan kedaluwarsa.

Fitur MQTT 5 lainnya

Memutuskan sambungan server

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

Request/Response

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

Ukuran Paket Maksimum

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

Format muatan dan jenis konten

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

Properti MQTT 5

Properti MQTT 5 adalah tambahan penting untuk standar MQTT untuk mendukung fitur MQTT 5 baru seperti Session Expiration dan pola. Request/Response Di AWS IoT Core, Anda dapat membuat aturan yang dapat meneruskan properti dalam pesan keluar, atau menggunakan HTTP Publish untuk menerbitkan pesan MQTT dengan beberapa properti baru.

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

Properti Deskripsi Jenis masukan Paket
Indikator Format Payload Nilai Boolean yang menunjukkan apakah payload diformat sebagai. UTF-8 Byte MENERBITKAN, TERHUBUNG
Jenis Konten Sebuah UTF-8 string yang menggambarkan isi payload. UTF-8 senar MENERBITKAN, TERHUBUNG
Topik Tanggapan UTF-8 String yang menjelaskan topik yang harus dipublikasikan penerima sebagai bagian dari alur permintaan-respons. Topik tidak boleh memiliki karakter wildcard. UTF-8 senar MENERBITKAN, TERHUBUNG
Data Korelasi Data biner yang digunakan oleh pengirim pesan permintaan untuk mengidentifikasi permintaan mana yang terkait dengan pesan respons. Biner MENERBITKAN, TERHUBUNG
Properti Pengguna Sepas UTF-8 ang string. Properti ini dapat muncul beberapa kali dalam satu paket. Penerima akan menerima pasangan kunci-nilai dalam urutan yang sama dengan yang dikirim. UTF-8 pasangan string MENGHUBUNGKAN, MEMPUBLIKASI, Akan Properti, BERLANGGANAN, PUTUS PUTUS, BERLANGGANAN
Interval Kedaluwarsa Pesan Bilangan bulat 4-byte yang mewakili Interval Kedaluwarsa Pesan dalam hitungan detik. Jika tidak ada, pesan tidak kedaluwarsa. bilangan bulat 4-byte MENERBITKAN, TERHUBUNG
Interval Kedaluwarsa Sesi

Bilangan bulat 4-byte yang mewakili interval kedaluwarsa sesi dalam detik. AWS IoT Core mendukung maksimal 7 hari, dengan default maksimum 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, HUBUNGKAN, PUTUSKAN
Pengidentifikasi Klien yang Ditugaskan ID klien acak yang dihasilkan oleh AWS IoT Core ketika ID klien tidak ditentukan oleh perangkat. ID klien acak harus merupakan pengenal klien baru yang tidak digunakan oleh sesi lain yang saat ini dikelola oleh broker. UTF-8 senar CONNACK
Server Tetap Hidup Bilangan bulat 2-byte yang mewakili waktu keep alive yang ditetapkan oleh server. Server akan memutuskan koneksi klien jika klien tidak aktif selama lebih dari waktu keep alive. Bilangan bulat 2-byte CONNACK
Minta Informasi Masalah Nilai Boolean yang menunjukkan apakah String Alasan atau Properti Pengguna dikirim jika terjadi kegagalan. Byte MENGHUBUNG
Terima Maksimum Bilangan bulat 2-byte yang mewakili jumlah maksimum paket PUBLISH QOS> 0 yang dapat dikirim tanpa menerima PUBACK. Bilangan bulat 2-byte TERHUBUNG, CONNACK
Alias Topik Maksimum Nilai ini menunjukkan nilai tertinggi yang akan diterima sebagai Alias Topik. Default-nya adalah 0. Bilangan bulat 2-byte TERHUBUNG, CONNACK
QoS maksimum Nilai maksimum QoS yang AWS IoT Core mendukung. Defaultnya 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 dipertahankan. Default-nya adalah 1.

Byte CONNACK
Ukuran Paket Maksimum Ukuran paket maksimum yang AWS IoT Core menerima dan mengirim. Tidak dapat melebihi 128 KB. bilangan bulat 4-byte TERHUBUNG, CONNACK
Langganan Wildcard Tersedia

Nilai Boolean yang menunjukkan apakah broker AWS IoT Core pesan mendukung Langganan Wildcard Tersedia. Default-nya adalah 1.

Byte CONNACK
Pengidentifikasi Langganan Tersedia

Nilai Boolean yang menunjukkan apakah broker AWS IoT Core pesan mendukung Subscription Identifier Tersedia. Default-nya adalah 0.

Byte CONNACK

Kode alasan MQTT

MQTT 5 memperkenalkan pelaporan kesalahan yang ditingkatkan dengan respons kode alasan. AWS IoT Core dapat mengembalikan kode alasan termasuk tetapi tidak terbatas pada yang berikut dikelompokkan berdasarkan paket. Untuk daftar lengkap kode alasan yang didukung oleh MQTT 5, lihat spesifikasi MQTT 5.

Kode Alasan CONNACK
Nilai Hex Nama Kode Alasan Deskripsi
0 0x00 Berhasil Koneksi diterima.
128 0x80 Kesalahan tidak ditentukan Server tidak ingin mengungkapkan alasan kegagalan, atau tidak ada kode alasan lain yang berlaku.
133 0x85 Pengidentifikasi Klien 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 administratif 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 itu diterima. Publikasi pesan QoS 1 berlanjut.
128 0x80 Kesalahan tidak ditentukan Penerima tidak menerima publikasi, tetapi tidak ingin mengungkapkan alasannya, atau tidak cocok dengan salah satu nilai lainnya.
135 0x87 Tidak diotorisasi PUBLISHING tidak diotorisasi.
144 0x90 Nama Topik tidak valid Nama topik tidak cacat, tetapi tidak diterima oleh klien atau server.
145 0x91 Pengidentifikasi paket yang digunakan Pengidentifikasi paket sudah digunakan. Ini mungkin menunjukkan ketidakcocokan dalam status sesi antara klien dan server.
151 0x97 Kuota terlampaui Batas implementasi atau administratif yang diberlakukan telah terlampaui.
DISCONNECT Kode Alasan
Nilai Hex Nama Kode Alasan Deskripsi
129 0x81 Paket yang tidak berformat 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 diotorisasi.
139 0x8B Server dimatikan Server dimatikan.
141 0x8D Batas waktu Keep Alive 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 mengirim PUBACK atau PUBCOMP.
148 0x94 Alias Topik tidak valid Klien atau server telah menerima paket PUBLISH yang berisi alias topik lebih besar dari Alias Topik Maksimum yang dikirim dalam paket CONNECT atau CONNACK.
151 0x97 Kuota terlampaui Batas implementasi atau administratif 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 tidak ditentukan Langganan tidak diterima dan Server tidak ingin mengungkapkan alasannya atau tidak ada Kode Alasan lainnya yang berlaku.
135 0x87 Tidak diotorisasi Klien tidak berwenang untuk melakukan langganan ini.
143 0x8F Filter Topik tidak valid Filter Topik dibentuk dengan benar tetapi tidak diizinkan untuk Klien ini.
145 0x91 Pengidentifikasi Paket yang digunakan Pengidentifikasi Paket yang ditentukan sudah digunakan.
151 0x97 Kuota terlampaui Batas implementasi atau administratif yang diberlakukan telah terlampaui.
Kode Alasan UNSUBACK
Nilai Hex Nama Kode Alasan Deskripsi
0 0x00 Berhasil Langganan dihapus.
128 0x80 Kesalahan tidak ditentukan Berlangganan tidak dapat diselesaikan dan Server tidak ingin mengungkapkan alasannya 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 Pengidentifikasi Paket yang digunakan Pengidentifikasi Paket yang ditentukan sudah digunakan.

AWS IoT perbedaan dari spesifikasi MQTT

Implementasi broker pesan didasarkan pada spesifikasi MQTT v3.1.1 dan spesifikasi MQTT v5.0, tetapi berbeda dari spesifikasi 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 tingkat QoS 0 berarti pesan dikirimkan nol kali atau lebih. Pesan dapat dikirimkan lebih dari satu kali. Pesan yang dikirim lebih dari satu kali mungkin dikirim dengan ID paket yang berbeda. Dalam kasus ini, bendera DUP tidak disetel.

  • Saat menanggapi permintaan koneksi, broker pesan mengirimkan pesan CONNACK. Pesan ini berisi tanda untuk menunjukkan apakah koneksi melanjutkan sesi sebelumnya.

  • Sebelum mengirim paket kontrol tambahan atau permintaan pemutusan, klien harus menunggu pesan CONNACK diterima di perangkat mereka dari broker AWS IoT pesan.

  • Ketika klien berlangganan topik, mungkin ada penundaan antara waktu broker pesan mengirim SUBACK dan waktu klien mulai menerima pesan baru yang cocok.

  • Ketika klien menggunakan karakter wildcard # dalam filter topik untuk berlangganan topik, semua string pada dan di bawah levelnya dalam hierarki topik dicocokkan. Namun, topik induk tidak cocok. Misalnya, langganan topik sensor/# menerima pesan yang dipublikasikan ke topiksensor/,, sensor/temperaturesensor/temperature/room1, tetapi tidak pesan yang dipublikasikan kesensor. Untuk informasi selengkapnya tentang wildcard, lihatFilter nama topik.

  • Broker pesan menggunakan ID klien untuk mengidentifikasi setiap klien. ID klien diteruskan dari klien ke broker pesan sebagai bagian dari payload 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 memutuskan koneksi klien secara manual menggunakan konsol atau API. Untuk informasi selengkapnya, lihat Manajemen koneksi MQTT.

  • 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 dipertahankan, permintaan berlangganan harus berisi filter topik yang sama persis dengan topik pesan yang dipertahankan.

  • Pialang pesan tidak menjamin urutan penerimaan pesan dan ACK.

  • AWS IoT dapat memiliki batasan yang berbeda dari spesifikasi. Untuk informasi selengkapnya, lihat batas dan kuota broker AWS IoT Core pesan dan protokol dari Panduan AWS IoT Referensi.

  • Bendera MQTT DUP tidak didukung.

Manajemen koneksi MQTT

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

Memutuskan koneksi klien MQTT

Gunakan DeleteConnection API untuk memutuskan sambungan perangkat MQTT AWS IoT Core dengan menentukan ID klien mereka. Saat Anda memutuskan koneksi klien, put AWS IoT Core uskan koneksi klien dari broker AWS IoT Core pesan dan dapat secara opsional membersihkan status sesi dan menekan pesan Last Will and Testament (LWT).

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

Broker pesan mengirimkan DISCONNECT paket ke perangkat dan menerbitkan peristiwa siklus hidup dengan alasan pemutusan hubunganAPI_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 menyet cleanSession el parameter ketrue, 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 disetel kefalse, 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, maka kredensi atau kebijakan klien juga harus dimodifikasi sebelum mengeluarkan panggilan DeleteConnection API.

Untuk informasi lebih lanjut tenngenai harga, lihat harga AWS IoT Core.

Kasus penggunaan

DeleteConnectionAPI berguna untuk mengelola klien yang berperilaku buruk yang menunjukkan perilaku bermasalah atau mengkonsumsi sumber daya yang berlebihan. Dengan memaksa pemutusan hubungan, 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. Ketika Anda perlu mengarahkan klien ke titik akhir yang berbeda atau Wilayah AWS, Anda dapat memutuskan sambungannya secara terprogram dan menyimpannya kembali ke AWS IoT Core titik akhir yang berbeda dengan mengubah pengaturan DNS. API ini dapat membantu menyelesaikan koneksi macet atau menghapus status sesi bermasalah yang mungkin mencegah operasi normal.

Parameter API:

DeleteConnectionAPI menerima parameter berikut:

ClientID (wajib)

Pengidentifikasi unik klien MQTT untuk memutuskan sambungan. Ini ditentukan dalam jalur URL. ID klien tidak dapat dimulai dengan tanda dolar ($).

catatan

ID klien MQTT dapat berisi karakter yang tidak valid dalam permintaan HTTP. Saat menggunakan DeleteConnection API, Anda harus mengkodekan URL (kode persen) karakter apa pun di ID klien yang valid di MQTT tetapi tidak di HTTP. Ini termasuk karakter khusus seperti spasi, garis miring ke depan (/), dan UTF-8 karakter. Misalnya, spasi menjadi %20, garis miring ke depan menjadi %2F, dan UTF-8 karakter ü menjadi %C 3% BC. Pengkodean yang tepat memastikan bahwa ID klien MQTT ditransmisikan dengan benar dalam panggilan HTTP-based API.

CleansSession (opsional)

Menentukan apakah akan menghapus status sesi klien saat memutuskan sambungan. Setel true untuk menghapus semua informasi sesi, termasuk langganan dan pesan yang mengantri. Setel false untuk mempertahankan status sesi. Secara default, ini disetel ke false (mempertahankan status sesi). Untuk sesi bersih, parameter ini diabaikan.

mencegah WillMessage (opsional)

Mengontrol apakah akan AWS IoT Core mengirimkan pesan Last Will and Testament (LWT) jika tersedia saat terputus. Setel true untuk mencegah pengiriman pesan LWT. Setel ke false untuk mengizinkan pengiriman. Secara default, ini disetel ke false (mengirimkan LWT jika tersedia).

Sintaks API

DeleteConnectionAPI 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 untuk menandatangani permintaan adalah: iot devicegateway. Anda dapat menemukan titik akhir Anda dengan menggunakan aws iot describe-endpoint --endpoint-type iot:Data-ATS perintah.

Izin yang diperlukan

Untuk menggunakan DeleteConnection API, Anda memerlukan izin IAM berikut:

iot:DeleteConnection

Anda dapat memasukkan izin ini ke ID klien tertentu menggunakan kebijakan berbasis sumber daya. Contoh:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:DeleteConnection", "Resource": "arn:aws:iot:us-east-1:987654321:client/myDevice*" } ] }

Pertimbangan penting

Klien yang terputus dapat segera mencoba menyambung kembali kecuali Anda telah menerapkan logika tambahan untuk mencegah koneksi ulang. Operasi pemutusan hanya mengakhiri koneksi saat ini dan tidak mencegah koneksi menyambung 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 AWS IoT Core tarif 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.

Tanggapan kesalahan

DeleteConnectionAPI dapat mengembalikan respons kesalahan berikut:

InvalidRequestException

Permintaan tidak valid. Hal ini dapat terjadi jika format ID klien tidak valid, berisi awalan tanda dolar ($), 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

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

InternalFailureException

Kesalahan tak terduga telah terjadi. Coba kembali permintaan setelah penundaan singkat.

ServiceUnavailableException

Layanan ini untuk sementara tidak tersedia. Coba kembali permintaan setelah penundaan singkat.

Melihat detail koneksi

Gunakan GetConnection API untuk mengambil informasi terperinci tentang koneksi klien MQTT aktif, termasuk status koneksi, detail sesi, dan informasi jaringan.

GetConnectionAPI mengembalikan metadata koneksi komprehensif yang membantu memecahkan masalah konektivitas, memantau perilaku klien, dan mengaudit pola koneksi. Anda dapat menggunakan informasi ini untuk memahami siklus hidup koneksi klien dan mendiagnosis masalah dengan sesi MQTT. Informasi koneksi tersedia selama 30 menit setelah pemutusan terlepas dari apakah klien menggunakan sesi bersih atau persisten. Untuk metatdata terputus lebih dari 30 menit, gunakan GetThingConnectivityData API yang mengharuskan pengindeksan armada diaktifkan.

Kasus penggunaan

GetConnectionAPI berguna untuk memecahkan masalah koneksi dan memantau perilaku klien. Anda dapat memverifikasi status konektivitas klien, memeriksa pengaturan sesi persisten, dan meninjau stempel waktu koneksi untuk memahami pola konektivitas klien.

Diagnostik jaringan juga mendapat manfaat dari API ini. Rincian koneksi termasuk alamat IP sumber dan target dan port, yang membantu mengidentifikasi masalah routing jaringan atau masalah titik akhir koneksi. Informasi ini sangat berharga saat men-debug masalah konektivitas atau mengoptimalkan konfigurasi jaringan.

Parameter API:

GetConnectionAPI menerima parameter berikut:

ClientID (wajib)

Pengidentifikasi unik klien MQTT untuk mengambil detail koneksi. Ini ditentukan dalam jalur URL. ID klien tidak dapat dimulai dengan tanda dolar ($).

catatan

ID klien MQTT dapat berisi karakter yang tidak valid dalam permintaan HTTP. Saat menggunakan GetConnection API, Anda harus mengkodekan URL (kode persen) karakter apa pun di ID klien yang valid di MQTT tetapi tidak di HTTP. Ini termasuk karakter khusus seperti spasi, garis miring ke depan (/), dan UTF-8 karakter. Misalnya, spasi menjadi %20, garis miring ke depan menjadi %2F, dan UTF-8 karakter ü menjadi %C 3% BC. Pengkodean yang tepat memastikan bahwa ID klien MQTT ditransmisikan dengan benar dalam panggilan HTTP-based API.

Pertimbangan perutean: Pengkodean URL diperlukan ketika ID klien berisi garis miring maju dan string “langganan”. Tanpa pengkodean yang tepat, struktur jalur mungkin salah ditafsirkan dan permintaan Anda akan dialihkan ke ListSubscriptions API alih-alih. GetConnection Misalnya, ID klien client/subscriptions harus dikodekan sebagai client%2FSubscriptions untuk memastikan rute permintaan dengan benar ke alih- GetConnection alih ditafsirkan sebagai panggilan. ListSubscriptions

termasuk SocketInformation (opsional)

Jenis: Boolean

Bawaan: salah

includeSocketInformationParameter mengontrol apakah informasi jaringan tingkat soket disertakan dalam respons API. Ketika diset true el ke, respons mencakup bidang berikut:sourceIp,sourcePort,targetIp,targetPort,vpcEndpointId. Ketika tidak includeSocketInformation ditentukan atau disetel kefalse, bidang soket ini dikecualikan dari respons. Jika includeSocketInformation parameter disetel ke true tetapi pemanggil tidak memiliki otorisasi untuk melihat informasi soket, seluruh panggilan API gagal dengan 403 Forbidden.

Sintaks API

GetConnectionAPI menggunakan format permintaan HTTP berikut:

GET /connections/<client-id>?includeSocketInformation=false HTTP/1.1

Contoh permintaan:

GET /connections/myDevice123?includeSocketInformation=false HTTP/1.1 // Get connection details for a client with special characters (URL encoded) // Original client ID: "my device/123" GET /connections/my%20device%2F123?includeSocketInformation=true HTTP/1.1

Contoh respons untuk klien yang terhubung:

{ "clientId": "abcd12345fvgbh", "connected": true, "cleanSession": false, "connectedSince": 1573002340451, "thingName": "deviceABC", "sourceIp": "203.0.113.1", "sourcePort": 8883, "targetIp": "198.51.100.1", "targetPort": 8883, "keepAliveDuration": 60, "disconnectReason": null, "sessionExpiry": 3600 }

Bidang respons:

clientId

ID klien klien MQTT.

terhubung

Status koneksi klien. Meng true embalikan jika klien saat ini terhubung ke AWS IoT Core, atau false jika klien tidak terhubung.

CleansSession

Menunjukkan apakah klien menggunakan sesi bersih. Kembali true untuk sesi bersih atau false untuk sesi persisten. Sesi bersih tidak mempertahankan status setelah pemutusan, sementara sesi persisten mempertahankan langganan dan pesan antri.

TerhubungSejak

Stempel waktu Unix (dalam milidetik) menunjukkan kapan klien terhubung. Hadir hanya ketika connected adatrue.

TerputusSejak

Stempel waktu Unix (dalam milidetik) menunjukkan kapan klien terputus. Hadir hanya ketika connected adafalse.

Nama benda

Nama benda klien, hadir hanya ketika ada sesuatu yang terkait dengan clientID.

Pemutusan KoneksiPengkhianatan

Alasan pemutusan terbaru, jika klien saat ini terputus. Bidang ini membantu mengidentifikasi apakah pemutusan itu dimulai oleh klien, dimulai oleh server, atau karena masalah jaringan. Hadir hanya ketika connected adafalse. Untuk kode alasan pemutusan, lihat LifeCycleEvents.

menjaga AliveDuration

Interval keep-alive dalam hitungan detik yang ditentukan klien saat membuat koneksi. Ini menentukan seberapa sering klien mengirim pesan keep-alive untuk mempertahankan koneksi.

SumberIP

Alamat IP klien yang memulai koneksi. Hanya dikembalikan jika includeSocketInformation disetel ke true dan Anda berwenang untuk mengambil informasi ini.

Sumber Port

Nomor port yang digunakan oleh klien untuk koneksi. Hanya dikembalikan jika includeSocketInformation disetel ke true dan Anda berwenang untuk mengambil informasi ini.

Tip Target

Alamat IP tempat permintaan koneksi dibuat. Hanya dikembalikan jika includeSocketInformation disetel ke true dan Anda berwenang untuk mengambil informasi ini.

TargetPort

Nomor port AWS IoT Core titik akhir yang terhubung ke klien. Hanya dikembalikan jika includeSocketInformation disetel ke true dan Anda berwenang untuk mengambil informasi ini.

vpc EndpointId

ID dari VPC endpoint. Hadir untuk klien yang terhubung AWS IoT Core melalui titik akhir VPC. Hanya dikembalikan jika includeSocketInformation disetel ke true dan Anda berwenang untuk mengambil informasi ini.

SessionKedaluwarsa

Konfigurasi kedaluwarsa sesi persisten yang ditentukan klien atau default saat membuat koneksi. Ini menentukan berapa lama sesi tetap aktif setelah klien terputus.

catatan

Nama layanan yang digunakan oleh AWS Signature Version 4 untuk menandatangani permintaan adalah: iot devicegateway. Anda dapat menemukan titik akhir Anda dengan menggunakan aws iot describe-endpoint --endpoint-type iot:Data-ATS perintah.

Izin yang diperlukan

Untuk menggunakan GetConnection API, Anda memerlukan izin IAM berikut:

iot:GetConnection

Anda dapat memasukkan izin ini ke ID klien tertentu menggunakan kebijakan berbasis sumber daya.

Tip

Gunakan iot:IncludeSocketInformation kondisi untuk menerapkan kontrol akses terperinci berdasarkan persyaratan privasi organisasi Anda.

Contoh kebijakan otorisasi

Contoh 1: Izinkan GetConnection dengan informasi soket untuk semua klien

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:GetConnection", "Resource": "arn:aws:iot:us-east-1:987654321:client/*" } ] }

Dengan kebijakan ini, panggilan API berikut mengembalikan detail koneksi termasuk informasi soket:

GET /connections/myDevice123?includeSocketInformation=true HTTP/1.1

Hasil: API mengembalikan semua bidang koneksi, termasuksourceIp,sourcePort,targetIp, dantargetPort.

Contoh 2: Izinkan GetConnection tetapi tolak informasi soket untuk klien tertentu

Anda dapat menggunakan pendekatan berbasis kondisi atau pendekatan penolakan eksplisit:

Condition-based pendekatan:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:GetConnection", "Resource": "arn:aws:iot:us-east-1:987654321:client/myDevice*", "Condition": { "Bool": { "iot:IncludeSocketInformation": "false" } } } ] }

Pendekatan penolakan eksplisit:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "iot:GetConnection", "Resource": "arn:aws:iot:us-east-1:987654321:client/myDevice*", "Condition": { "Bool": { "iot:IncludeSocketInformation": "true" } } }, { "Effect": "Allow", "Action": ["iot:GetConnection"], "Resource": "arn:aws:iot:us-east-1:987654321:client/myDevice*" } ] }

Dengan salah satu kebijakan, panggilan API berikut ditolak:

GET /connections/myDevice123?includeSocketInformation=true HTTP/1.1

Hasil: API mengembalikan kesalahan 403 Terlarang karena akses informasi soket dibatasi untuk klien ini.

Tanggapan kesalahan

GetConnectionAPI dapat mengembalikan respons kesalahan berikut:

InvalidRequestException

Permintaan tidak valid. Hal ini dapat terjadi jika format ID klien tidak valid, berisi awalan tanda dolar ($), atau jika parameter yang diperlukan hilang. Kode Status HTTP: 400

ResourceNotFoundException

ID klien yang ditentukan tidak ada atau saat ini tidak terhubung, dan tidak memiliki sesi persisten. Kode Status HTTP: 404

ForbiddenException

Penelepon tidak berwenang untuk membuat permintaan. Hal ini mungkin terjadi karena izin IAM yang tidak mencukupi atau pembatasan kebijakan berbasis sumber daya. Kode Status HTTP: 403

ThrottlingException

Tarifnya melebihi batas. Kurangi frekuensi panggilan API Anda dan terapkan logika coba ulang yang sesuai dengan backoff eksponensial. Kode Status HTTP: 429

InternalFailureException

Kesalahan tak terduga telah terjadi. Coba kembali permintaan setelah penundaan singkat. Kode Status HTTP: 500

Mengelola langganan klien

Gunakan ListSubscriptions API untuk mengambil semua langganan topik untuk sesi klien MQTT. API ini mengembalikan langganan untuk klien yang terhubung dan klien offline dengan sesi persisten, memberikan visibilitas ke dalam pola langganan klien dan membantu memecahkan masalah terkait langganan.

ListSubscriptionsAPI menyediakan informasi langganan komprehensif yang membantu mengaudit perilaku klien, memecahkan masalah pengiriman pesan, dan memahami pola langganan di seluruh armada perangkat Anda. Anda dapat menggunakan informasi ini untuk memverifikasi bahwa klien berlangganan topik yang diharapkan dan mengidentifikasi potensi konflik langganan.

Kasus penggunaan

ListSubscriptionsAPI membantu Anda memecahkan masalah pengiriman pesan dan mengaudit perilaku langganan klien. Gunakan API ini untuk memverifikasi topik mana yang berlangganan klien, memvalidasi level QoS, dan mengidentifikasi langganan yang tumpang tindih atau kartu sementara yang terlalu permisif.

Skenario manajemen langganan juga mendapat manfaat dari API ini. Saat klien melaporkan pesan yang hilang atau pengiriman pesan tak terduga, Anda dapat menggunakan API ini untuk memverifikasi langganan mereka saat ini dan memastikannya sesuai dengan konfigurasi yang diharapkan. Ini sangat berharga untuk men-debug hierarki langganan yang kompleks dan konfigurasi langganan bersama.

Parameter API:

ListSubscriptionsAPI menerima parameter berikut:

ClientID (wajib)

Pengidentifikasi unik klien MQTT untuk mengambil langganan. Ini ditentukan dalam jalur URL. ID klien tidak dapat dimulai dengan tanda dolar ($).

catatan

ID klien MQTT dapat berisi karakter yang tidak valid dalam permintaan HTTP. Saat menggunakan ListSubscriptions API, Anda harus mengkodekan URL (kode persen) karakter apa pun di ID klien yang valid di MQTT tetapi tidak di HTTP. Ini termasuk karakter khusus seperti spasi, garis miring ke depan (/), dan UTF-8 karakter. Misalnya, spasi menjadi %20, garis miring ke depan menjadi %2F, dan UTF-8 karakter ü menjadi %C 3% BC. Pengkodean yang tepat memastikan bahwa ID klien MQTT ditransmisikan dengan benar dalam panggilan HTTP-based API.

Pertimbangan perutean: Pengkodean URL diperlukan ketika ID klien berisi garis miring maju dan string “langganan”. Tanpa pengkodean yang tepat, struktur jalur mungkin salah ditafsirkan dan permintaan Anda akan dialihkan ke ListSubscriptions API alih-alih. GetConnection Misalnya, ID klien client/subscriptions harus dikodekan sebagai client%2FSubscriptions untuk memastikan rute permintaan dengan benar ke alih- GetConnection alih ditafsirkan sebagai panggilan. ListSubscriptions

BerikutnyaToken (opsional)

Token pagination untuk mengambil rangkaian hasil berikutnya. Gunakan token ini dari respons sebelumnya untuk melanjutkan paginating melalui daftar langganan besar.

MaxResults (opsional)

Jumlah maksimum langganan untuk dikembalikan dalam satu respons. Kisaran yang valid adalah 1-200. Nilai defaultnya adalah 20.

Sintaks API

ListSubscriptionsAPI menggunakan format permintaan HTTP berikut:

GET /connections/<client-id>/subscriptions?nextToken=token&maxResults=max HTTP/1.1

Contoh permintaan:

// Get subscriptions for a specific client GET /connections/myDevice123/subscriptions HTTP/1.1 // Get subscriptions with custom page size GET /connections/myDevice123/subscriptions?maxResults=50 HTTP/1.1 // Get next page of results using pagination token GET /connections/myDevice123/subscriptions?nextToken=eyJhbGciOiJIUzI1NiJ9&maxResults=50 HTTP/1.1

Contoh respons:

{ "subscriptions": [ {"topicFilter": "device/myDevice123/commands", "qos": 1}, {"topicFilter": "device/myDevice123/shadow", "qos": 0} ], "nextToken": "eyJhbGciOiJIUzI1NiJ9" }

Bidang respons:

langganan

Array objek langganan, masing-masing berisi filter topik dan tingkat QoS.

TopikFilter

Filter topik MQTT yang berlangganan klien. Ini dapat mencakup wildcard (+, #) untuk pencocokan pola.

qos

Tingkat Kualitas Layanan untuk langganan (0 atau 1).

BerikutnyaToken

Token pagination untuk mengambil hasil tambahan. Hadir hanya ketika ada lebih banyak langganan untuk diambil.

catatan

Nama layanan yang digunakan oleh AWS Signature Version 4 untuk menandatangani permintaan adalah: iot devicegateway. Anda dapat menemukan titik akhir Anda dengan menggunakan aws iot describe-endpoint --endpoint-type iot:Data-ATS perintah.

Izin yang diperlukan

Untuk menggunakan ListSubscriptions API, Anda memerlukan izin IAM berikut:

iot:ListSubscriptions

Anda dapat memasukkan izin ini ke ID klien tertentu menggunakan kebijakan berbasis sumber daya. Contoh:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:ListSubscriptions", "Resource": "arn:aws:iot:us-east-1:987654321:client/myDevice*" } ] }

Tanggapan kesalahan

ListSubscriptionsAPI dapat mengembalikan respons kesalahan berikut:

InvalidRequestException

Permintaan tidak valid. Kode Status HTTP: 400

ResourceNotFoundException

Sumber daya yang ditentukan tidak ada. Kode Status HTTP: 404

ForbiddenException

Penelepon tidak berwenang untuk membuat permintaan. Kode Status HTTP: 403

ThrottlingException

Tarifnya melebihi batas. Kode Status HTTP: 429

InternalFailureException

Kesalahan tak terduga telah terjadi. Kode Status HTTP: 500

Manajemen koneksi MQTT menggunakan konsol

Anda dapat menggunakan AWS IoT konsol untuk memutuskan perangkat MQTT dan mengelola koneksi mereka. Konsol menyediakan antarmuka intuitif untuk melihat perangkat yang terhubung dan melakukan operasi pemutusan hubungan.

Lihat klien MQTT yang terhubung

Prosedur ini menunjukkan cara melihat perangkat MQTT yang saat ini terhubung di AWS IoT konsol.

Untuk melihat perangkat MQTT yang terhubung
  1. Buka konsol AWS IoT.

  2. Di panel navigasi kiri, pilih Kelola, lalu pilih Semua perangkat.

  3. Pilih Koneksi klien untuk melihat daftar perangkat MQTT yang saat ini terhubung.

  4. Halaman Koneksi Klien menampilkan informasi komprehensif tentang setiap perangkat yang terhubung. Anda dapat melihat ID Klien, yang berfungsi sebagai pengidentifikasi unik untuk perangkat MQTT, dan status Koneksi yang menunjukkan apakah perangkat saat ini terhubung. Halaman ini juga menampilkan stem pel waktu Connected sejak yang menunjukkan kapan perangkat membuat koneksi, alamat IP Sumber dari mana perangkat terhubung, dan interval Ke ep alive yang dikonfigurasi untuk koneksi perangkat.

Lihat langganan klien MQTT

Prosedur ini menunjukkan kepada Anda cara melihat langganan topik untuk klien MQTT tertentu menggunakan AWS IoT konsol.

Untuk melihat langganan klien
  1. Buka konsol AWS IoT.

  2. Di panel navigasi kiri, pilih Kelola, lalu pilih Semua perangkat.

  3. Pilih Koneksi Kli en untuk melihat daftar perangkat MQTT.

  4. Cari ID klien tertentu yang ingin Anda lihat langganan untuk menggunakan fungsi pencarian.

  5. Pilih ID klien untuk melihat halaman detailnya.

  6. Di halaman detail klien, cari tabel Subscribed Topics. Tabel ini menampilkan semua filter topik yang saat ini berlangganan klien, bersama dengan tingkat Kualitas Layanan (QoS) yang sesuai.

  7. Tabel Topik Ber langganan menunjukkan:

    • Filter topik: Pola topik MQTT klien berlangganan, yang mungkin termasuk wildcard (+, #)

    • Qo S: Tingkat Kualitas Layanan untuk langganan (0 atau 1)

catatan

Informasi berlangganan tersedia untuk klien yang terhubung dan klien offline dengan sesi persisten. Jika klien tidak memiliki langganan aktif, tabel akan kosong.

Putuskan sambungan perangkat MQTT

Prosedur ini menunjukkan cara memutuskan perangkat MQTT tertentu menggunakan AWS IoT konsol.

Untuk memutuskan sambungan perangkat MQTT
  1. Di halaman Koneksi klien, cari perangkat yang ingin Anda putuskan.

  2. Pilih perangkat dengan memilih tombol radio di sebelah ID klien.

  3. Pilih T ind akan, lalu pilih Putuskan sambungan klien.

  4. Di kotak dialog Putuskan klien, konfigurasikan opsi pemutusan:

    1. Untuk sesi Ber sihkan, Anda dapat memilih untuk mempertahankan atau menghapus status sesi. Mem ilih Pertahankan status sesi menyimpan informasi sesi perangkat, termasuk langganan dan pesan antri, memungkinkan perangkat melanjutkan sesi sebelumnya setelah koneksi ulang. Atau, memilih Hapus status sesi menghapus semua informasi sesi saat memutuskan sambungan perangkat, memaksanya untuk membuat sesi yang sama sekali baru saat terhubung kembali.

    2. Untuk pesan Last Will and Testament, Anda dapat mengontrol apakah pesan LWT perangkat dipublikasikan setelah terputus. Memilih Izinkan pesan LWT menerbitkan pesan Last Will and Testament perangkat setelah terputus, yang memberi tahu perangkat lain tentang pemutusan yang tidak terduga. Memilih Mencegah pesan LWT mencegah pesan Last Will and Testament dipublikasikan, yang berguna selama pemeliharaan terencana atau pemutusan terkontrol.

  5. Pilih Put uskan sambungan untuk mengonfirmasi tindakan.

  6. Konsol menampilkan pesan konfirmasi saat perangkat berhasil terputus. Perangkat tidak akan lagi muncul dalam daftar perangkat yang terhubung.

catatan

Perangkat yang terputus dapat segera mencoba menyambung kembali kecuali Anda telah menerapkan logika tambahan untuk mencegah koneksi ulang. Operasi pemutusan hanya mengakhiri koneksi saat ini.

AWS IoT perbedaan dari spesifikasi MQTT

Implementasi broker pesan didasarkan pada spesifikasi MQTT v3.1.1 dan spesifikasi MQTT v5.0, tetapi berbeda dari spesifikasi 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 tingkat QoS 0 berarti pesan dikirimkan nol kali atau lebih. Pesan dapat dikirimkan lebih dari satu kali. Pesan yang dikirim lebih dari satu kali mungkin dikirim dengan ID paket yang berbeda. Dalam kasus ini, bendera DUP tidak disetel.

  • Saat menanggapi permintaan koneksi, broker pesan mengirimkan pesan CONNACK. Pesan ini berisi tanda untuk menunjukkan apakah koneksi melanjutkan sesi sebelumnya.

CloudWatch Log AWS IoT entri log

Pi AWS IoT alang pesan menghasilkan entri log dengan eventType waktu Connect klien MQTT terhubung.

Hubungkan contoh entri log

{ "timestamp": "2017-08-10 15:37:23.476", "logLevel": "INFO", "traceId": "20b23f3f-d7f1-feae-169f-82263394fbdb", "accountId": "123456789012", "status": "Success", "eventType": "Connect", "protocol": "MQTT", "clientId": "abf27092886e49a8a5c1922749736453", "thingName": "myDevice", "principalId": "145179c40e2219e18a909d896a5340b74cf97a39641beec2fc3eeafc5a932167", "sourceIp": "205.251.233.181", "sourcePort": 13490, "keepAliveDuration": 60, "sessionExpiry": 3600, "cleanSession": boolean }

Selain atribut Log umum CloudWatch , entri log Connect berisi atribut berikut:

clientId

ID klien yang membuat permintaan.

Id Utama

ID kepala sekolah yang membuat permintaan.

Nama benda

Nama benda klien. Mengembalikan nilai ketika sesuatu dikaitkan dengan ID klien.

protokol

Protokol yang digunakan untuk membuat permintaan. Nilai yang valid adalah MQTT atau HTTP.

SumberIP

Alamat IP tempat permintaan berasal.

Sumber Port

Pelabuhan tempat permintaan berasal.

menjaga AliveDuration

Interval keep-alive dalam hitungan detik yang ditentukan klien saat membuat koneksi.

SessionKedaluwarsa

Konfigurasi kedaluwarsa sesi persisten yang ditentukan klien saat membuat koneksi.

CleansSession

Menunjukkan apakah klien menggunakan sesi bersih.