如何通过物联网提高AWS Lambda和Web应用之间的MQTT消息的可靠性

格里吉尔

我始终接收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());
});
凯尔·罗奇(Kyle Roche)

Web应用程序的每个用户是否都具有相同的客户端ID?客户端ID和证书对将断开所有重复的连接。同样,$ aws是影子主题(和其他诊断主题)的前缀。也许使用东西/工作站?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章