Topik ini menjelaskan cara mengonfigurasi langganan sisi server untuk mendorong notifikasi perubahan status perangkat suatu Produk ke antrian Simple Message Queue (formerly MNS) (SMQ). Server Anda kemudian dapat menerima notifikasi tersebut dengan mendengarkan antrian MNS.
Prasyarat
-
Pastikan layanan Alibaba Cloud berikut telah diaktifkan:
-
Siapkan lingkungan pengembangan. Contoh ini menggunakan lingkungan pengembangan Java berikut:
-
Sistem operasi: Windows 10 64-bit
-
Versi JDK: JDK 8
-
Lingkungan pengembangan terintegrasi (IDE): IntelliJ IDEA Community Edition
-
Konfigurasi langganan sisi server
Di Konsol IoT Platform, buat langganan sisi server untuk MNS dan pilih jenis pesan yang ingin Anda langgani.
-
Masuk ke Konsol IoT Platform.
Pada halaman Overview, temukan instans yang ingin Anda kelola lalu klik ID instans atau nama instans tersebut.
-
Di panel navigasi sebelah kiri, pilih . Lalu, klik Create Product untuk membuat produk detektor gas.
-
Pilih untuk membuat perangkat di bawah produk detektor gas.
Sertifikat perangkat diperlukan saat Anda mengonfigurasi SDK sisi perangkat.
-
Di panel navigasi sebelah kiri, pilih . Lalu, klik Create Subscription untuk membuat langganan sisi server untuk MNS. Untuk informasi selengkapnya, lihat Use server-side subscriptions for MNS.
CatatanSaat pertama kali mengatur penerusan pesan ke MNS, Anda harus mengklik Authorize pada prompt. Anda kemudian akan diarahkan ke Konsol RAM untuk memberikan akses IoT Platform ke MNS.
Pada contoh ini, pilih Device Status Change Notification sebagai jenis pesan. Hal ini memastikan bahwa semua notifikasi perubahan status perangkat untuk produk tersebut didorong ke antrian MNS.
Setelah langganan dibuat, IoT Platform secara otomatis membuat antrian di MNS untuk menerima pesan. Nama antrian mengikuti format
aliyun-iot-${yourProductKey}. Anda harus menggunakan nama antrian ini saat mengonfigurasi SDK MNS untuk mendengarkan pesan.Di daftar langganan, klik ikon di samping MNS untuk melihat nama antrian MNS.
Konfigurasi SDK MNS sisi server
Contoh ini menggunakan demo SDK MNS untuk Java.
-
Buka catatan rilis MNS SDK untuk Java, unduh paket sampel, lalu ekstrak.
Contoh ini menggunakan paket sampel aliyun-sdk-mns-samples-1.1.9.1.zip.
-
Di IntelliJ IDEA, impor folder aliyun-sdk-mns-samples-1.1.9.1 sebagai proyek.
-
Di direktori lokal Anda di C:\Users\${YourComputerUserName}, buat file properties bernama .aliyun-mns.properties. Di file ini, tambahkan kredensial autentikasi MNS Anda dalam format berikut:
CatatanDirektori home di Linux adalah /home/YOURNAME/. Direktori home di Windows adalah C:\Users\YOURNAME.
mns.accountendpoint=http://${your_accountId}.mns.${your_regionId}.aliyuncs.com mns.accesskeyid=${your_accesskeyid} mns.accesskeysecret=${your_accesskeysecret}Parameter
Deskripsi
accountendpoint
Titik akhir untuk layanan MNS Anda. Anda dapat menemukannya di Konsol Message Service (MNS). Pilih wilayah tempat antrian Anda berada lalu klik Details untuk antrian tersebut.
accesskeyid
ID AccessKey dan Rahasia AccessKey Akun Alibaba Cloud Anda.
Masuk ke Konsol IoT Platform, arahkan kursor ke gambar profil, lalu klik AccessKey Management untuk mendapatkan ID AccessKey dan Rahasia AccessKey.
accesskeysecret
-
Di file ComsumerDemo.java, yang berada di direktori src\main\java\com.aliyun.mns.sample.Queue, tentukan nama antrian Simple Message Queue (formerly MNS) yang secara otomatis dibuat oleh IoT Platform.
public static void main(String[] args) { CloudAccount account = new CloudAccount( ServiceSettings.getMNSAccessKeyId(), ServiceSettings.getMNSAccessKeySecret(), ServiceSettings.getMNSAccountEndpoint()); MNSClient client = account.getMNSClient(); // Inisialisasi client. // Konsumsi pesan. try{ CloudQueue queue = client.getQueueRef("aliyun-iot-a1eN7La****");// Ganti ini dengan nama antrian yang secara otomatis dibuat oleh IoT Platform. for (int i = 0; i < 10; i++) { Message popMsg = queue.popMessage(); // Ambil satu pesan dari antrian. if (popMsg != null){ System.out.println("message handle: " + popMsg.getReceiptHandle()); System.out.println("message body: " + popMsg.getMessageBodyAsString()); // Dapatkan isi pesan mentah. System.out.println("message id: " + popMsg.getMessageId()); System.out.println("message dequeue count:" + popMsg.getDequeueCount()); // Tambahkan logika pemrosesan pesan Anda di sini. // Hapus pesan dari antrian. queue.deleteMessage(popMsg.getReceiptHandle()); System.out.println("delete message successfully.\n"); } } } catch (Exception e) { e.printStackTrace(); } } -
Jalankan file ComsumerDemo.java.
Konfigurasi SDK sisi perangkat
-
Buka Link SDK lalu pilih SDK untuk Java.
-
Unduh demo Link SDK untuk Java lalu ekstrak paket tersebut.
CatatanDengan mengunduh demo ini, Anda menyetujui Perjanjian Lisensi Perangkat Lunak.
-
Di IntelliJ IDEA, impor proyek JavaLinkKitDemo.
-
Di file device_id, masukkan informasi sertifikat perangkat Anda.
{ "productKey": "xxx", "deviceName": "Esensor", "productSecret": "", "deviceSecret": "1xxx?2" } -
Di file MqttSample.java, yang berada di direktori src\main\java\com.aliyun.alink.devicesdk.demo, atur topik publish ke topik perangkat Anda.
public class MqttSample extends BaseSample { final static String TAG = "MqttSample"; public MqttSample(String pk, String dn) { super(pk, dn); } /** * Contoh API publish. */ public void publish() { MqttPublishRequest request = new MqttPublishRequest(); // Tentukan topik berdasarkan kasus penggunaan Anda. request.topic = "/sys/" + productKey + "/" + deviceName + "/thing/deviceinfo/update"; } } -
Di file HelloWorld.java, yang berada di direktori src\main\java\com.aliyun.alink.devicesdk.demo, masukkan informasi koneksi perangkat.
Untuk mendapatkan informasi koneksi perangkat, lihat View and configure instance endpoints. Format
channelHostadalah{productKey}.iot-as-mqtt.{region}.aliyuncs.com:1883. Contoh kode:public void init(final DeviceInfoData deviceInfoData) { this.pk = deviceInfoData.productKey; this.dn = deviceInfoData.deviceName; LinkKitInitParams params = new LinkKitInitParams(); /** * Atur parameter inisialisasi MQTT. */ IoTMqttClientConfig config = new IoTMqttClientConfig(); config.productKey = deviceInfoData.productKey; config.deviceName = deviceInfoData.deviceName; config.deviceSecret = deviceInfoData.deviceSecret; config.channelHost = pk + ".iot-as-mqtt." + deviceInfoData.region + ".aliyuncs.com:1883"; /** * Menentukan apakah menerima pesan offline. * Ini sesuai dengan field cleanSession di MQTT. */ // ... } -
Jalankan file HelloWorld.java untuk menghubungkan perangkat.
Verifikasi hasil
Setelah SDK sisi perangkat dijalankan, notifikasi perangkat online dikirim ke antrian Simple Message Queue (formerly MNS) melalui langganan sisi server. SDK Simple Message Queue (formerly MNS) kemudian mengonsumsi pesan dari antrian dan menghapusnya.
Contoh berikut menunjukkan output ketika SDK Simple Message Queue (formerly MNS) berhasil menerima dan menghapus pesan.
message handle: 519xxx...AgMA==
message body:
{"payload":"eyJsYXN0xxx...IiwiY2xpZW5xxx...","topic":"/as/mqtt/status/xxx/device1","messageid":15xxx,"timestamp":1661158432}
message id: 51xxx...C49
message dequeue count:1
delete message successfully.