2016-07-20 4 views
0

람다 함수에 의해 게시되고 웹 응용 프로그램에 의해 구독 된 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()); 
}); 

답변

2

웹 응용 프로그램의 모든 사용자가 동일한 클라이언트 ID로 끝나나요? 클라이언트 ID와 인증서 쌍은 중복 연결을 끊습니다. 또한 $ aws는 그림자 항목 (및 기타 진단 항목)의 접두사입니다. 어쩌면 물건/워크 스테이션을 사용할 수 있습니까?

+0

저는 웹 클라이언트를 하나만 운영 중입니다 (그리고 오직 하나만 가질 것입니다). 그래서 그 것이 확실하지 않습니다. 나는 또한 $ aws 접두사 물건을 떠나지 않고 그냥 성공을 거치지 않고 일반 주제에 게시/구독하려고했습니다. 나는 $ aws/things/workstation/shadow/update를 구독하고 테스트 람다 (Lambda) 함수를 통해 그림자를 업데이트하기도했지만 구독 끝 부분에는 아무 것도 나오지 않았다. – Gregir

+0

그냥 $ aws 대신 $ aws/things를 제거하는 것이 문제였습니다. 고마워, 카일. – Gregir