Kann ich mehrere MQTT-Themen in einer einzigen Anfrage veröffentlichen?


10

Ich habe ein Gerät mit mehreren Sensoren, das jeden Sensorwert separat zu Themen wie veröffentlicht

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

Wir geben es mit dem Amazon AWS IoT SDK an AWS IoT weiter, d. H.

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

Jeder Aufruf generiert ein separates TCP-Paket und eine separate Antwort vom AWS MQTT-Broker. Das Problem ist, dass sich einige unserer Knoten in einem sehr langsamen Netzwerk befinden und auf ACK warten, nachdem jedes Paket die Veröffentlichung verzögert hat.

Gibt es eine Möglichkeit, alle Sensorwerte zu einem einzigen TCP-Paket zusammenzufassen, während sie in separaten Themen veröffentlicht werden und QOS = 1 bleibt?

Antworten:


7

Es sieht so aus, als ob das aws IoT sdk eine synchrone Veröffentlichung verwendet (da es einen Rückkehrcode verwendet), sodass es für jede Nachricht blockiert.

Auf MQTT-Protokollebene gibt es keinen Grund dafür, dass nicht mehrere Nachrichten gleichzeitig im Flug sind, sodass Sie die Verwendung des asynchronen Paho-Clients prüfen können, damit auf die QOS1-Antwort gewartet werden kann, ohne die Veröffentlichung der nächsten Nachricht zu blockieren.

Eine andere Möglichkeit wäre, nur eine zusammengesetzte Nachricht mit allen Sensorwerten auf einmal zu veröffentlichen und sie auf Verbraucherseite aufzuteilen.


1
Nur solange er sich keine Sorgen um den Antwortcode macht. Wenn Sie keine 200 OKAntwort erhalten, bedeutet dies, dass beide Vorgänge fehlgeschlagen sind? Nur eine? Wenn ja, welcher?
Mawg sagt, Monica

Sie können den Rückkehrcode weiterhin überprüfen. Sie müssen ihn nur mit dem von der Veröffentlichung zurückgegebenen Token vergleichen, um zu wissen, auf welchen er sich bezieht.
Hardillb

Aber im Gegensatz zu SUBSCRIBE können wir nicht eine Reihe von Themen und die entsprechenden Nachrichten in derselben MQTT-Nachricht einrichten, oder?
Cogitoergosum
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.