단일 요청으로 여러 MQTT 주제를 공개 할 수 있습니까?


10

각 센서 판독 값을 다음과 같은 주제에 별도로 게시하는 여러 센서가있는 장치가 있습니다.

device1-id/sensor1-id = 10.2
device1-id/sensor2-id = 15.5
[...]

Amazon AWS IoT SDK를 사용하여 AWS IoT에 공급합니다.

mqtt_params.qos = QOS1;
mqtt_params.payload = payload;
mqtt_params.payloadLen = payload_len;
rc = aws_iot_mqtt_publish(&client, topic, topic_len, &mqtt_params);

각 호출은 별도의 TCP 패킷과 AWS MQTT 브로커로부터 별도의 응답을 생성합니다. 문제는 일부 노드가 매우 느린 네트워크에 있고 모든 패킷이 게시를 지연시킨 후 ACK를 기다리는 것입니다.

별도의 주제로 게시하고 QOS = 1을 유지하면서 모든 센서 판독 값을 단일 TCP 패킷에 묶을 수있는 방법이 있습니까?

답변:


7

AWS IoT SDK가 동기 게시를 사용하는 것처럼 보이므로 (반환 코드를 사용하므로) 각 메시지에 대해 차단됩니다.

MQTT 프로토콜 레벨에서 한 번에 여러 메시지를 가질 수없는 이유는 없으므로 다음 메시지의 공개를 차단하지 않고 QOS1 응답 대기를 수행 할 수 있도록 paho 비동기 클라이언트 사용을 볼 수 있습니다.

다른 옵션은 모든 센서 값을 한 번에 하나의 복합 메시지 만 게시하고 소비자 쪽에서 나누는 것입니다.


1
응답 코드가 걱정되지 않는 한. 200 OK응답이 없으면 두 작업이 모두 실패 했습니까? 단 하나? 그렇다면 어느 것입니까?
Mawg는 모니카

여전히 리턴 코드를 확인할 수 있습니다. 공개에서 리턴 된 토큰과 비교하여 리턴 코드를 확인하면됩니다.
hardillb

그러나 SUBSCRIBE와는 달리 동일한 MQTT 메시지에서 토픽 및 해당 메시지의 배열을 설정할 수 없습니다.
cogitoergosum 2018 년

hardillb는 " 또 다른 옵션은 모든 센서 값을 한 번에 하나의 복합 메시지 만 게시하고 소비자 쪽에서 나누는 것입니다."라고 말했습니다. 이것은 다중 레벨 와일드 카드 를 의미 합니까?
user170106

1
@ user170106 아니요, 모든 업데이트를 단일 메시지로 묶으면 단일 주제 만 구독하면됩니다.
hardillb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.