람다 함수에 의해 게시되고 웹 응용 프로그램에 의해 구독 된 MQTT 메시지를 지속적으로받는 데 문제가 있습니다 (IoT에서 "물건"사용). "워크 스테이션"). 나는 가끔씩 그걸 당장 꺼내기도하지만 때로는 간헐적 인 일이지만, 가장 자주 듣는다면, 나는 아주 오랜 시간 후에 그 말을 듣게됩니다. 나는 항상 연결하고 구독 할 수 있습니다. Qos 0과 1을 시도했습니다.IoT를 통해 AWS Lambda와 웹 응용 프로그램간에 MQTT 메시지의 신뢰성을 높이는 방법
EDIT : $ aws/... 접두사가없고 qos가 1 인 일반 주제 문자열을 사용하는 경우, 이제는 메시지의 슬림 나는 보낸다. 그러나 그들은 거의 즉각적인 것이 아니며 한 번에 여러 개를 쌓아 올 수 있습니다. 그리고 몇몇은 완전히 잃어버린다.
나는 알렉사 기술을 역할을하는 람다 기능을 가지고, 그것은이 같은의 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 장치 SDK를 사용하여 웹 응용 프로그램이 해당 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());
});
저는 웹 클라이언트를 하나만 운영 중입니다 (그리고 오직 하나만 가질 것입니다). 그래서 그 것이 확실하지 않습니다. 나는 또한 $ aws 접두사 물건을 떠나지 않고 그냥 성공을 거치지 않고 일반 주제에 게시/구독하려고했습니다. 나는 $ aws/things/workstation/shadow/update를 구독하고 테스트 람다 (Lambda) 함수를 통해 그림자를 업데이트하기도했지만 구독 끝 부분에는 아무 것도 나오지 않았다. – Gregir
그냥 $ aws 대신 $ aws/things를 제거하는 것이 문제였습니다. 고마워, 카일. – Gregir