All Products
Search
Document Center

IoT Platform:Spesifikasi protokol MQTT

Last Updated:Jun 03, 2026

Message Queuing Telemetry Transport (MQTT) adalah protokol perpesanan asinkron yang dibangun di atas stack protokol TCP/IP. Sebagai protokol publish-subscribe yang ringan, MQTT dirancang untuk lingkungan jaringan yang tidak andal dan cocok untuk skenario di mana perangkat memiliki keterbatasan pada penyimpanan perangkat keras atau lebar pita jaringan. Protokol ini memisahkan pengirim dan penerima pesan dalam dimensi waktu dan ruang. Platform IoT mendukung koneksi perangkat melalui MQTT.

Versi yang didukung

Platform IoT mendukung koneksi MQTT standar yang kompatibel dengan versi 5.0, 3.1.1, dan 3.1. Spesifikasi resmi: MQTT 5.0, MQTT 3.1.1, MQTT 3.1.

Penting

Untuk menggunakan protokol MQTT 5.0, Anda harus terlebih dahulu membeli Instans Perusahaan.

Perbedaan dari MQTT standar

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

  • Mendukung clean session.

  • Tidak mendukung will message atau retained message.

  • Mendukung level Quality of Service (QoS) 0 dan 1. Tidak mendukung QoS 2.

  • Tidak mendukung subscription QoS. QoS pesan ditentukan oleh pengirim (PUB).

  • Mendukung revert-RPC (RRPC) berdasarkan topik MQTT native, memungkinkan pemanggilan sinkron dari server ke perangkat.

Fitur MQTT 5.0 yang didukung

MQTT 5.0 memperkenalkan fitur-fitur yang meningkatkan kinerja dan kemudahan penggunaan. Lihat Lampiran C. Ringkasan fitur baru dalam MQTT v5.0 dan Ikhtisar MQTT 5.0.

Platform IoT mendukung fitur MQTT 5.0 berikut ini.

Fitur yang didukung

Cara penggunaan

Session expiry

  • Atur Clean Start dan Session Expiry Interval saat koneksi:

    MqttConnectionOptions options = new MqttConnectionOptions();
    options.setCleanStart(true);
    options.setSessionExpiryInterval(60L);// Satuan: detik.
    
    MqttClient mqttClient = new MqttClient(host, clientId, new MemoryPersistence());
    mqttClient.connect(options);
  • Atur Session Expiry Interval saat disconnect:

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

Message expiry

Atur Message Expiry Interval saat memublikasikan:

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

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

MqttProperties mqttProperties = new MqttProperties();

// Atur waktu hidup (TTL) pesan.
mqttProperties.setMessageExpiryInterval(600L);

message.setProperties(mqttProperties);

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

Subscription options

Opsi langganan yang tersedia:

  • QoS: Level QoS pesan MQTT. Anda dapat mengaturnya ke 0 (pesan QoS 0) atau 1 (pesan QoS 1).

  • No Local: Menentukan apakah klien menerima pesan yang dipublikasikannya sendiri.

    Pada MQTT 3.1.1, klien menerima pesan yang dipublikasikannya sendiri pada topik yang dilanggani. Pada MQTT 5.0, atur opsi ini ke true untuk mencegah pengiriman ke diri sendiri.

    Nilai:

    • true: Tidak menerima.

    • false: Menerima.

  • Retain As Publish: Menentukan apakah server mempertahankan flag RETAIN saat meneruskan pesan ke klien.

    Nilai:

    • true: Jika pesan memiliki flag RETAIN, flag tersebut dipertahankan. Jika pesan tidak memiliki flag RETAIN, opsi ini tidak berpengaruh.

    • false: Flag RETAIN tidak dipertahankan, terlepas dari apakah pesan asli memiliki flag tersebut atau tidak.

    Penting

    Pengaturan Retain As Publish tidak memengaruhi flag RETAIN pada retained message.

  • Retain Handling: Menentukan apakah server mengirim retained message ke klien saat langganan dibuat.

    Nilai:

    • 0: Server mengirim retained message selama langganan klien berhasil.

    • 1: Server mengirim retained message hanya jika langganan klien berhasil dan langganan tersebut sebelumnya belum ada.

    • 2: Server tidak mengirim retained message meskipun langganan klien berhasil.

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

// Atur opsi langganan QoS.
mqttSubscription.setQos(1);

// Atur opsi langganan No Local.
mqttSubscription.setNoLocal(true);

// Atur opsi langganan Retain As Published.
mqttSubscription.setRetainAsPublished(true);

// Atur opsi langganan Retain Handling.
mqttSubscription.setRetainHandling(1);

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

Retained message

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

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

Will message

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

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

// Atur will message.
options.setWill(topic, message);

// Atur penundaan will.
MqttProperties willMessageProperties = new MqttProperties();
willMessageProperties.setWillDelayInterval(60L);
options.setWillMessageProperties(willMessageProperties);

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

Connection negotiation

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

User property

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

Setelah perangkat terhubung melalui MQTT 5.0, data UserProperty yang dilaporkan akan terlihat di log Platform IoT.

Penting

Maksimal 20 properti. Kunci tidak boleh diawali garis bawah (_). Panjang gabungan kunci-nilai tidak boleh melebihi 128 karakter.

Request-response pattern

Jika peminta adalah perangkat dan penerima adalah server bisnis Anda, uraikan ResponseTopic dan CorrelationData dari properti pesan setelah langganan AMQP atau penerusan aturan. Kemudian panggil operasi API Pub untuk merespons perangkat.

MqttProperties properties = new MqttProperties();
properties.setCorrelationData("requestId12345".getBytes());
properties.setResponseTopic("/" + productKey + "/" + deviceName + "/user/get");
Penting
  • Decode Base64 CorrelationData yang diuraikan untuk memulihkan array byte aslinya.

  • Panjang maksimum ResponseTopic dan CorrelationData masing-masing adalah 128 karakter.

Enhanced error codes

Pemecahan masalah error.

Topic alias

Tidak berlaku.

Shared subscriptions

Format topik shared subscription: $share/${ShareName}/${filter}.

  • $share: Bidang statis. Topik untuk shared subscription harus diawali dengan $share.

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

    Sesi dengan ${ShareName} yang sama berbagi satu langganan. Setiap pesan yang sesuai dikirimkan hanya ke satu sesi.

  • ${filter}: Filter topik dalam langganan non-shared. Mendukung 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

  • Mode koneksi langsung TLS (saluran terenkripsi): Memberikan tingkat keamanan tinggi.

    Penting
    • Platform IoT mendukung TLS 1.0, 1.1, 1.2, dan 1.3. Gunakan TLS 1.2 atau 1.3 — versi yang lebih lama memiliki kerentanan keamanan yang diketahui.

    • Link SDK di sisi perangkat secara default menggunakan TLS 1.2 dan 1.3.

  • Mode koneksi langsung TCP (tidak terenkripsi): Fitur ini akan segera dihentikan. Jangan gunakan.

    Penting

    Anda menanggung seluruh risiko kebocoran data akibat penggunaan mode koneksi langsung TCP.

Spesifikasi topik

Untuk definisi dan klasifikasi topik, lihat Apa itu topik?.

Anda dapat melihat topik komunikasi default pada halaman produk perangkat di Konsol. Topik khusus fitur dijelaskan dalam dokumentasi masing-masing fitur.

Batasan

Setiap identitas perangkat yang terdaftar hanya mendukung satu protokol komunikasi dalam satu waktu.

Catatan penggunaan

Platform IoT menyediakan SDK sisi perangkat untuk koneksi MQTT. Lihat Hubungkan perangkat menggunakan SDK sisi perangkat.

Metode koneksi: