玩了一下 阿里的 mqtt, 感觉要放弃了
demo
// 开源sdk地址:https://github.com/mqttjs/MQTT.js
var mqtt = require('mqtt')
var CryptoJS = require('crypto-js')
var accessKey='xxxx'
var secretKey='xxxx'
var clientId = 'GID_dev@@@hardware2'
var instanceId='mqtt-cn-xxxx'
// https://help.aliyun.com/document_detail/48271.html
var username = 'Signature|' + accessKey + '|' + instanceId;
var password = CryptoJS.HmacSHA1(clientId, secretKey).toString(CryptoJS.enc.Base64);
var options={
'username':username,
'password':password,
'clientId':clientId,
'keepalive':90,
'connectTimeout': 3000
}
// //tls安全连接:"tls://host:8883"
var client = mqtt.connect('tcp://host:1883',options)
var topic='dev'
// client.on('connect', function () {
// client.subscribe(topic, {'qos':1})
// })
// client.on('message', function (topic, message) {
// console.log('topic:'+topic+' msg:'+message.toString())
// })
var i=0
setInterval(function(){
client.publish(topic + '/test/1', 'Hello mqtt ' + (i++))
// client.publish(topic + '/p2p/' + clientId, 'Hello mqtt ' + (i++))
},1000)
配置费用
- 连接数上限
1,000个 - TPS 上限
500条/s - 订阅关系数上限
10,000个
迁移痛点
- 客户端单设备订阅关系限制 <= 30个
app 同事需要评估一下,我感觉有点不够用
产品系列和定价
- 客户端单设备订阅关系限制 <= 30个
- 服用器重启加载离线消息(保留消息)
获取离线 MQTT 消息
- 服用器重启加载离线消息(保留消息)
cleanSession=false
如果离线消息过多,即大于 30 条,微消息队列 MQTT 版系统会分批(5 秒一次,每次 30 条)下发离线消息,这个太慢了
-
阿里云规则里必须要建立顶级 Topic
要改代码
暂时分为两类:dev 和 app
-
- 获取 MQTT 客户端在线状态
要改代码
获取 MQTT 客户端在线状态
- 获取 MQTT 客户端在线状态
- 权限验证有两种模式
需要讨论怎么使用
鉴权概述
- 权限验证有两种模式
亮点
除了标准 MQTT 协议所支持的发布/订阅(Pub/Sub)消息收发模式外,微消息队列 MQTT 版还支持点对点(Point to Point,简称 P2P)模式。
P2P 消息收发模式