传送门:5个视频讲解,30个场景案例汇总
在物联网场景中,常常会有全量设备消息广播诉求。如何把消息瞬间推送到海量在线设备上?
阿里云IoT企业物联网实例为开发者提供了 PubBroadcast 接口,可以在秒级触达100万在线设备,使得企业面在面对高并发需求时无后顾之忧。
创建4个设备和广播内容
我们以收款音箱场景消息广播为例,演示全量设备广播功能。
设备和广播消息体
广播消息内容
产品
设备
收款音箱
dk004
g6palBDnzyT
"volume":80,
dk003
mode":4
dk002
dk001
loT物联网技术
全量设备广播接口PubBroadcast
类型
名称
描述
系统规定参数.取值:PubBroadcast.
String
Action
您需要将消息原文转换成二进制数据,
String
MessageContent
并进行Base64编码,最大报文64KB.
接收广播消息的产品Key.
String
Productkey
J订物联网技术
企业实例ID.
String
lotlnstanceld
设备端收到的消息报文示例:
Topic示例:/sys/g6palBDnzyT/dk004/broadcast/request/1386995865331441413Payload示例:{ "volume": 80, "mode": 4}
全量广播开发实战
设备端开发
IoT物联网平台默认提供全量广播Topic,设备端无需预先订阅,即可接收到云端的广播消息。
设备端应用程序代码(Node.js 示例):
// node broadcast-device.jsconst mqtt = require('aliyun-iot-mqtt'); //1.设备身份三元组+区域const options = require("./iot-device-config.json"); // 2. 建立MQTT连接const client = mqtt.getAliyunIotMqttClient(options); //系统全量广播 Topic 前缀const allBroadcastTopic = `/sys/${options.productKey}/${options.deviceName}/broadcast/request`; client.on('message', function(topic, message) { //过滤全量广播消息 if (topic.indexOf(allBroadcastTopic) > -1) { console.log("设备收到全量广播消息:") console.log("\ttopic=" + topic) console.log("\tmessage=" + message) } })
iot-device-config.json 设备配置参数:
{ productKey: "g6palBDnzyT", deviceName: "dk004", deviceSecret: "424ed56661980c604255507d1b81464e", host: "iot-060a08kg.mqtt.iothub.aliyuncs.com"}
云端后台开发
云端业务系统调用IoT物联网实例的PubBroadcast接口,即可发送广播消息,触达全量在线设备。调用代码示例(Node.js):
// node broadcast.jsconst co = require('co'); const RPCClient = require('@alicloud/pop-core').RPCClient; const options = { accessKey: "自己的accessKey", accessKeySecret: "自己的accessKeySecret"}; //1.创建clientconst client = new RPCClient({ accessKeyId: options.accessKey, secretAccessKey: options.accessKeySecret, endpoint: 'https://iot.cn-shanghai.aliyuncs.com', apiVersion: '2018-01-20'}); // 2.构造iot API// 这里是POP API的Actionconst action = 'PubBroadcast'; // 广播内容const payload = { volume: 80, mode: 4}; // 完整入参 paramsconst params = { ProductKey: "g6palBDnzyT", IotInstanceId: "iot-064a04kg", MessageContent: new Buffer(JSON.stringify(payload)).toString("base64") }; co(function*() { //3.发起全量广播PubBroadcast API调用 try { const response = yield client.request('PubBroadcast', params); console.log("PubBroadcast 成功 =====>", JSON.stringify(response)); } catch (err) { console.log("PubBroadcast 失败 =====>", JSON.stringify(err)); } });
全量广播联调
业务服务器调用 PubBroadcast API 日志:
nodePubBroadcast
F"RequestId":"A95C5704
成功
PubBroadcast
_-A584-E
二二二二->3
Success":true,"MessageId:1387000844339148288"
24BFO358573"
loT物联网技术
4个设备端收到的广播消息日志:
Topic的消息id相同,deviceName不同
设备收到全量广播消息:
LBDnzyt/dkoo1/broadcast/request
topic-/sys/g6palBDr
/1387000844339148288
message-f"volume":80,"mode":4
设备收到全量广播消息:
topic-/sys/g6palBDnzyt/dkqo2/broadcast/request
1387000844339148288
message-ff"volume":80,"mode":47
设备收到全量广播消息:
topic-/sys/g6palBDnzyt/dklo3/broadcast/request
1387000844339148288
:80,"mode":4
message-tt"volume
设备收到全量广播消息:
topic-/sys/g6palBDnzyT/dkl04/broadcast/request
/1387000844339148288
message-I"volume":80,"mode":4
loT物联网技术