Topik ini menjelaskan cara menggunakan SDK AMQP untuk Node.js guna terhubung ke Alibaba Cloud IoT Platform dan menerima pesan melalui langganan sisi server.
Prasyarat
Anda telah memperoleh ID kelompok konsumen dan berlangganan ke pesan topik yang diperlukan.
Kelola kelompok konsumen AMQP: Anda dapat menggunakan kelompok konsumen default (DEFAULT_GROUP) di Platform IoT atau membuat kelompok konsumen baru.
Konfigurasi langganan sisi server AMQP: Berlangganan ke pesan topik yang diperlukan menggunakan kelompok konsumen.
Siapkan lingkungan pengembangan
Diperlukan Node.js versi 8.0.0 atau lebih baru.
Unduh dan instal SDK
Untuk SDK AMQP Node.js, kami merekomendasikan penggunaan pustaka rhea. Kunjungi rhea untuk mengunduh pustaka tersebut dan meninjau dokumentasinya.
Contoh ini menggunakan perintah npm install rhea untuk menginstal pustaka rhea.
Prosedur
-
Pada sistem Windows atau Linux, unduh dan instal Node.js. Topik ini menggunakan sistem Windows 10 (64-bit) dan paket instalasi node-v14.15.1-x64.msi sebagai contoh.
-
Setelah instalasi, buka command-line interface dan jalankan perintah berikut untuk memeriksa versi Node.js.
node --versionInstalasi yang berhasil akan menampilkan nomor versi:
v14.15.1 -
Buat file JavaScript, misalnya amqp.js, untuk menyimpan kode contoh.
Modifikasi parameter sesuai dengan tabel di bawah ini.
PentingTentukan nilai parameter yang valid. Jika tidak, client AMQP gagal terhubung ke Platform IoT.
const container = require('rhea'); const crypto = require('crypto'); // Mengekspos Pasangan Kunci Akses Anda dapat membahayakan keamanan akun Anda. // Kode ini mengambil Pasangan Kunci Akses dari Variabel lingkungan hanya untuk tujuan demonstrasi. var accessKey = process.env['ALIBABA_CLOUD_ACCESS_KEY_ID']; var accessSecret = process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']; // Buat koneksi. var connection = container.connect({ // Titik akhir. Untuk informasi selengkapnya, lihat dokumentasi tentang cara menghubungkan client AMQP. 'host': '${YourHost}', 'port': 5671, 'transport':'tls', 'reconnect':true, 'idle_time_out':60000, // Format username. Untuk informasi selengkapnya, lihat dokumentasi tentang cara menghubungkan client AMQP. 'username':'${YourClientId}|authMode=aksign,signMethod=hmacsha1,timestamp=1573489088171,authId=' + accessKey + ',iotInstanceId=${YourIotInstanceId},consumerGroupId=${YourConsumerGroupId}|', // Hitung signature. Untuk informasi selengkapnya tentang format password, lihat dokumentasi tentang cara menghubungkan client AMQP. 'password': hmacSha1(accessSecret, 'authId='+ accessKey +'×tamp=1573489088171'), }); // Buat tautan receiver. var receiver = connection.open_receiver(); // Fungsi callback untuk menerima pesan yang didorong dari cloud. container.on('message', function (context) { var msg = context.message; var messageId = msg.message_id; var topic = msg.application_properties.topic; var content = Buffer.from(msg.body.content).toString(); // Tampilkan konten. console.log(content); // Kirim ACK. Jangan sertakan operasi yang memakan waktu dalam fungsi callback. context.delivery.accept(); }); // Hitung signature password. function hmacSha1(key, context) { return Buffer.from(crypto.createHmac('sha1', key).update(context).digest()) .toString('base64'); }Parameter
Contoh
Deskripsi
host
iot-cn-***.amqp.iothub.aliyuncs.com
Titik akhir AMQP.
Untuk titik akhir AMQP (
${YourHost}), lihat Lihat dan konfigurasi titik akhir instans.username
'test |authMode=aksign,signMethod=hmacsha1,timestamp=1573489088171,authId=LTAI****************,iotInstanceId=,consumerGroupId=DEFAULT_GROUP|'
Kredensial otentikasi untuk terhubung ke Platform IoT. String ini berisi parameter berikut:
-
${YourClientId}: Ganti dengan ID klien Anda. Anda dapat menentukan ID kustom hingga panjang 64 karakter. Kami merekomendasikan penggunaan pengenal unik, seperti UUID, alamat MAC, atau alamat IP server tempat client AMQP Anda berjalan.Setelah client AMQP terhubung, Anda dapat melihat parameter ini di Konsol Platform IoT. Di konsol instans Anda, buka . Pada tab tersebut, klik View di sebelah kelompok konsumen Anda. Halaman Consumer Group Details menampilkan ID klien untuk membantu Anda membedakan antar klien.
-
${YourAccessKeyId}dan${YourAccessKeySecret}: Ganti dengan ID AccessKey dan AccessKey Secret Anda.Untuk memperolehnya, masuk ke Konsol Platform IoT, arahkan penunjuk mouse ke foto profil Anda di pojok kanan atas, lalu klik AccessKey Management.
CatatanJika Anda menggunakan RAM user, Anda harus menyambungkan kebijakan AliyunIOTFullAccess ke RAM user tersebut. Jika tidak, koneksi akan gagal. Untuk informasi selengkapnya, lihat Akses RAM user.
-
${YourIotInstanceId}: Ganti dengan ID instans Anda.Masuk ke Konsol Platform IoT. Anda dapat menemukan ID instans pada tab Overview instans Anda.
PentingJika tab Overview tidak tersedia atau instans Anda tidak memiliki ID, hapus parameter
iotInstanceId=${YourIotInstanceId}dari string username. -
${YourConsumerGroupId}: Ganti dengan ID kelompok konsumen Anda.Untuk menemukan ID kelompok konsumen Anda, masuk ke Konsol Platform IoT. Di konsol instans Anda, buka .
password
hmacSha1('yourAccessKeySecret','authId=LTAI****************×tamp=1573489088171')
-
-
Buka command-line interface, arahkan ke direktori yang berisi file amqp.js Anda, lalu jalankan perintah berikut untuk menginstal pustaka rhea:
npm install rheaSetelah perintah selesai, direktori root proyek Anda berisi folder
node_modules, fileamqp.js, dan filepackage-lock.json. -
Di jendela CMD, masukkan perintah berikut untuk menjalankan kode amqp.js dan memulai server client AMQP.
node amqp.js
Hasil contoh
-
Berhasil: Jika koneksi berhasil, klien mulai menerima pesan dan mencatat output seperti berikut. Contoh ini menampilkan data suhu dan kelembapan yang dilaporkan oleh perangkat.
xxx>node iot_amqp.js {"deviceType":"CustomCategory","iotId":"xxx","requestId":"1613748030337","checkFailedData":{},"productKey":"xxx","gmtCreate":1613747903528, "deviceName":"xxx","items":{"Temperature":{"value":xxx,"time":1613747903526},"Humidity":{"value":23,"time":1613747903526}}} {"deviceType":"CustomCategory","iotId":"xxx","requestId":"1613729851729","checkFailedData":{},"productKey":"xxx","gmtCreate":1613729721715, "deviceName":"xxx","items":{"Temperature":{"value":17,"time":1613729721715},"Humidity":{"value":20,"time":1613729721715}}} -
Gagal: Jika koneksi gagal, muncul pesan kesalahan seperti berikut.
Gunakan log kesalahan untuk memeriksa kode dan pengaturan jaringan Anda. Perbaiki masalah tersebut, lalu jalankan kembali kode.
>node iot_amqp.js [connection-1] disconnected Error: getaddrinfo ENOTFOUND iot-xxx.b.aliyuncs.com at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:67:26) { errno: -3008, code: 'ENOTFOUND', syscall: 'getaddrinfo', hostname: 'ixxx.iyuncs.com' }
Referensi
Untuk informasi selengkapnya tentang kode kesalahan pesan langganan sisi server, lihat Kode kesalahan terkait pesan.