全部产品
Search
文档中心

IoT Platform:Protokol MQTT

更新时间:Jul 06, 2025

Message Queuing Telemetry Transport (MQTT) adalah protokol komunikasi asinkron berbasis tumpukan protokol TCP/IP. MQTT merupakan protokol ringan yang digunakan untuk mengirim pesan dalam model publikasi/berlangganan. Protokol ini dapat diskalakan di lingkungan jaringan yang tidak andal dan cocok untuk skenario dengan keterbatasan ruang penyimpanan perangkat keras atau lebar pita jaringan. Pengirim dan penerima pesan melalui MQTT tidak dibatasi oleh waktu atau tempat. Anda dapat menghubungkan perangkat ke IoT Platform menggunakan MQTT.

Versi yang Didukung

IoT Platform mendukung koneksi perangkat melalui MQTT. Versi MQTT yang didukung meliputi: 5.0, 3.1.1, dan 3.1. Untuk informasi lebih lanjut, lihat MQTT 5.0, MQTT 3.1.1, dan MQTT 3.1.

Penting

Sebelum menghubungkan perangkat ke IoT Platform melalui MQTT 5.0, Anda harus membeli instance Enterprise Edition.

Perbedaan antara MQTT berbasis IoT Platform dan MQTT standar

  • Mendukung pesan MQTT seperti PUB, SUB, PING, PONG, CONNECT, DISCONNECT, dan UNSUB.

  • Mendukung flag sesi bersih.

  • Tidak mendukung pesan wasiat dan pesan yang disimpan.

  • Mendukung pesan dengan tingkat layanan (QoS) 0 dan QoS 1, tetapi tidak mendukung QoS 2.

  • Tidak mendukung pengaturan QoS pada klien pelanggan. Hanya QoS yang ditentukan oleh klien penerbit yang didukung.

  • Mendukung mode Revert-Remote Procedure Call (RRPC) sinkron berdasarkan topik MQTT asli. Server dapat memanggil layanan perangkat dan mendapatkan respons secara bersamaan.

Fitur MQTT 5.0 yang Didukung

Dibandingkan versi sebelumnya, MQTT 5.0 menyediakan sejumlah fitur baru untuk meningkatkan performa dan pengalaman pengguna. Untuk informasi lebih lanjut, lihat Lampiran C. Ringkasan Fitur Baru di MQTT 5.0 dan Ikhtisar MQTT 5.0.

IoT Platform mendukung beberapa fitur baru dari MQTT 5.0. Tabel berikut menjelaskan fitur-fitur tersebut.

Fitur yang Didukung

Referensi

Kedaluwarsa Sesi

  • Konfigurasikan fitur Clean Start dan interval kedaluwarsa sesi ketika perangkat terhubung.

    MqttConnectionOptions options = new MqttConnectionOptions();
    options.setCleanStart(true);
    options.setSessionExpiryInterval(60L);// Unit: detik.
    
    MqttClient mqttClient = new MqttClient(host, clientId, new MemoryPersistence());
    mqttClient.connect(options);
  • Konfigurasikan fitur Clean Start dan interval kedaluwarsa sesi ketika perangkat terputus.

    MqttProperties mqttProperties = new MqttProperties();
    mqttProperties.setSessionExpiryInterval(60L);// Unit: detik.
    
    MqttAsyncClient mqttAsyncClient = new MqttAsyncClient(host, clientId, new MemoryPersistence());
    mqttAsyncClient.disconnect(30000, null, null, MqttReturnCode.RETURN_CODE_SUCCESS, mqttProperties);

Kedaluwarsa Pesan

Tentukan interval kedaluwarsa pesan ketika perangkat mengirim pesan.

IntervalString content = "Hello World";
byte[] payload = content.getBytes();

// Buat pesan.
MqttMessage message = new MqttMessage(payload);
// Tentukan tingkat QoS untuk pesan.
message.setQos(1);

MqttProperties mqttProperties = new MqttProperties();

// Tentukan interval kedaluwarsa pesan.
mqttProperties.setMessageExpiryInterval(600L);

message.setProperties(mqttProperties);

// Publikasikan pesan ke topik.
MqttClient mqttClient = new MqttClient(host, clientId, new MemoryPersistence());
mqttClient.publish(topic, message);

Opsi Berlangganan

Parameter berlangganan yang didukung:

  • QoS: Tingkat QoS pesan MQTT. Nilai valid: 0 (pesan QoS 0) dan 1 (pesan QoS 1).

  • No Local: menentukan apakah klien menerima pesan yang diterbitkannya.

    Jika Anda menggunakan MQTT 3.1.1 dan klien berlangganan ke topik tempat klien mempublikasikan pesan, klien akan menerima pesan tersebut. Jika Anda menggunakan MQTT 5.0, Anda dapat mengatur parameter ini ke true ketika klien berlangganan ke topik. Dalam hal ini, klien tidak menerima pesan yang dipublikasikannya ke topik tersebut.

    Nilai valid:

    • true: Klien tidak menerima pesan yang dipublikasikannya.

    • false: Klien menerima pesan yang dipublikasikannya.

  • Retain As Publish: menentukan apakah mengabaikan pengenal RETAIN pesan ketika server meneruskan pesan ke klien.

    Nilai valid:

    • true: Jika pengenal RETAIN ada dalam pesan, pengenal tersebut dipertahankan. Jika pengenal RETAIN tidak ada dalam pesan, nilai ini tidak valid.

    • false: Pengenal RETAIN tidak dipertahankan terlepas dari apakah pengenal tersebut ada dalam pesan.

    Penting

    Nilai parameter Retain As Publish tidak memengaruhi pengenal RETAIN pesan yang disimpan.

  • Retain Handling: menentukan apakah server mengirim pesan yang disimpan ke klien ketika langganan dibuat antara server dan klien.

    Nilai valid:

    • 0: Jika langganan dibuat antara server dan klien, server mengirim pesan yang disimpan.

    • 1: Jika langganan baru dibuat antara server dan klien, server mengirim pesan yang disimpan.

    • 2: Server tidak mengirim pesan yang disimpan ke klien terlepas dari apakah langganan dibuat antara server dan klien.

MqttSubscription mqttSubscription = new MqttSubscription("aaa/bbb");

// Konfigurasikan parameter QoS.
mqttSubscription.setQos(1);

// Konfigurasikan parameter No Local.
mqttSubscription.setNoLocal(true);

// Konfigurasikan parameter Retain As Published.
mqttSubscription.setRetainAsPublished(true);

// Konfigurasikan parameter Retain Handling.
mqttSubscription.setRetainHandling(1);

MqttClient mqttClient = new MqttClient(host, clientId, new MemoryPersistence());
mqttClient.subscribe(new MqttSubscription[]{mqttSubscription});

Pesan yang Disimpan

// Buat pesan yang disimpan.
String content = "Hello World";
byte[] payload = content.getBytes();
MqttMessage message = new MqttMessage(payload);
// Tentukan pesan sebagai pesan yang disimpan.
message.setRetained(true);

// Publikasikan pesan ke topik.
MqttClient mqttClient = new MqttClient(host, clientId, new MemoryPersistence());
mqttClient.publish(topic, message);

Pesan Wasiat

// Buat pesan wasiat.
String content = "Will Message";
byte[] payload = content.getBytes();
MqttMessage message = new MqttMessage(payload);

MqttConnectionOptions options = new MqttConnectionOptions();
options.setUserName(USERNAME);
options.setPassword(PASSWORD.getBytes());

// Tentukan pesan sebagai pesan wasiat.
options.setWill(topic, message);

// Tentukan latensi untuk pesan wasiat.
MqttProperties willMessageProperties = new MqttProperties();
willMessageProperties.setWillDelayInterval(60L);
options.setWillMessageProperties(willMessageProperties);

// Buat koneksi.
MqttClient mqttClient = new MqttClient(host, clientId, new MemoryPersistence());
mqttClient.connect(options);

Umpan Balik pada Pembuatan Koneksi

MqttConnectionOptions connOpts = new MqttConnectionOptions();
connOpts.setMaximumPacketSize(1024L);

Properti Pengguna

MqttProperties properties = new MqttProperties();
List<UserProperty> userPropertys = new ArrayList<>();
userPropertys.add(new UserProperty("key1","value1"));
properties.setUserProperties(userPropertys);

Setelah perangkat terhubung ke IoT Platform melalui MQTT 5.0, Anda dapat melihat parameter UserProperty yang dikirimkan di log IoT Platform.

Penting

Anda dapat menambahkan hingga 20 properti. Kunci properti tidak boleh dimulai dengan garis bawah (_). Panjang total kunci dan nilai tidak boleh melebihi 128 karakter.

Pola Permintaan-respons

Sebagai contoh, peminta adalah perangkat dan penjawab adalah server bisnis Anda. Setelah Anda menggunakan fitur langganan Protokol Antrian Pesan Lanjutan (AMQP) atau penerusan data, Anda dapat menguraikan parameter ResponseTopic dan CorrelationData dari data properti dalam pesan. Kemudian, Anda dapat memanggil operasi Pub untuk mengirim respons ke perangkat.

MqttProperties properties = new MqttProperties();
properties.setCorrelationData("requestId12345".getBytes());
properties.setResponseTopic("/" + productKey + "/" + deviceName + "/user/get");
Penting
  • Nilai yang diuraikan dari parameter CorrelationData harus didekode Base64 ke array byte yang dikirimkan oleh perangkat.

  • Nilai parameter ResponseTopic atau CorrelationData tidak boleh melebihi 128 karakter panjangnya.

Peningkatan dalam kode kesalahan

Untuk informasi lebih lanjut, lihat Pemecahan Masalah.

Alias Topik

N/A

Berlangganan Bersama

Topik berlangganan bersama berada dalam format $share/${ShareName}/${filter}.

  • $share: item tetap. Nama setiap topik berlangganan bersama dimulai dengan $share.

  • ${ShareName}: string yang hanya dapat berisi huruf, angka, dan garis bawah (_).

    ${ShareName} menentukan sekelompok sesi yang berbagi langganan. Setiap pesan yang cocok dengan langganan bersama dikirim ke hanya satu sesi.

  • ${filter}: filter topik untuk langganan non-bersama. Nilainya dapat berisi huruf, angka, dan garis bawah (_).

Contoh:

MqttConnectionOptions options = new MqttConnectionOptions();
options.setUserName(username);
options.setPassword(password);

MqttClient mqttClient = new MqttClient(host, clientId, new MemoryPersistence());
mqttClient.connect(options);

mqttClient.subscribe("$share/testGroup/user/post", 1);

Tingkat Keamanan

  • Koneksi Transport Layer Security (TLS) terenkripsi: keamanan tinggi.

    Penting
    • TLS 1.0, 1.1, 1.2, dan 1.3 didukung. Kami merekomendasikan penggunaan TLS 1.2 atau 1.3 untuk enkripsi. TLS 1.0 dan 1.1 merupakan versi lama yang dapat menimbulkan risiko keamanan.

    • Link SDK dikonfigurasikan dengan TLS 1.2 dan TLS 1.3. Jika Anda menggunakan Link SDK, Anda tidak perlu mengonfigurasi protokol TLS.

  • Koneksi Transport Layer Security (TLS) tanpa enkripsi: keamanan rendah. Fitur ini akan segera dihapus. Kami merekomendasikan agar Anda tidak menggunakan fitur ini.

    Penting

    Jika Anda menggunakan koneksi TLS tanpa enkripsi, pastikan Anda memahami risiko kebocoran data yang mungkin terjadi akibat koneksi tersebut beserta konsekuensinya.

Spesifikasi Topik

Untuk informasi lebih lanjut tentang cara mendefinisikan dan mengklasifikasikan topik, lihat Topik.

Anda dapat melihat topik sistem di halaman Detail Perangkat konsol IoT Platform. Untuk informasi tentang topik spesifik fitur, lihat dokumentasi fitur terkait.

Batasan

Setelah mendaftarkan perangkat, Anda hanya dapat menggunakan satu protokol untuk menghubungkan perangkat ke IoT Platform. Anda tidak dapat menggunakan beberapa protokol untuk perangkat yang sama.

Catatan Penggunaan

IoT Platform menyediakan berbagai SDK perangkat. Anda dapat menggunakan SDK perangkat untuk menghubungkan perangkat ke IoT Platform melalui MQTT. Untuk informasi lebih lanjut tentang cara mendapatkan Link SDK, lihat Unduh Link SDK.

Untuk informasi lebih lanjut tentang cara mengaktifkan komunikasi MQTT antara perangkat dan IoT Platform menggunakan berbagai protokol komunikasi, lihat topik berikut: