我始终接收Lambda函数发布并由Web应用程序订阅的MQTT消息时遇到问题(使用IoT中称为“工作站”的“事物”)。有时我会立即获取它们,但是有些断断续续,但是大多数情况下,如果我完全获取它们,我会经过很长的延迟才能获取它们。我总是能够连接并订阅。我已经尝试过QOS 0和1。
编辑:如果我只使用不带$ aws / ...前缀的通用主题字符串,并且qos为1,我现在趋向于获得我发送的消息的绝大部分。但是它们很少是即时的,它们往往会堆积在一起,一次经历多个。而且有几个完全丢失了。
我有一个提供Alexa技能的Lambda函数,它会发布到IoT MQTT主题/类似的内容:
var params = {
// have also tried topic strings without $aws/things/ prefix here
topic: '$aws/things/workstation/',
payload: new Buffer('test message'),
qos: 0
};
iotData.publish(params, function(err, data) {
if (err) console.log('ERR: ', err); // an error occurred
else if (data) console.log('DATA: ', data); // successful response
});
然后,我有一个使用AWS IOT Device SDK的Web应用程序,该应用程序订阅了该MQTT通道并侦听如下消息:
var device = awsIoT.device({
keyPath: './keys/abcd1234xyz-private.pem.key',
certPath: './keys/abcd1234xyz-certificate.pem.crt',
caPath: './keys/root-CA.crt',
clientId: 'workstation',
region: 'us-east-1',
host: "abcd1234xyz.iot.us-east-1.amazonaws.com",
port: 8883
});
device.on('connect', function() {
console.log('connect');
// have also tried topic strings without $aws/things/ prefix here
device.subscribe('$aws/things/workstation/');
});
device.on('message', function(topic, payload) {
console.log('message', topic, payload.toString());
});
Web应用程序的每个用户是否都具有相同的客户端ID?客户端ID和证书对将断开所有重复的连接。同样,$ aws是影子主题(和其他诊断主题)的前缀。也许使用东西/工作站?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句