Czy mogę opublikować wiele tematów MQTT w jednym żądaniu?

10

Mam urządzenie z wieloma czujnikami, które publikują każdy czujnik osobno, czytając takie tematy

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

Dostarczamy go do AWS IoT za pomocą Amazon AWS IoT SDK, tj

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

Każde połączenie generuje osobny pakiet TCP i oddzielną odpowiedź od brokera AWS MQTT. Problem polega na tym, że niektóre z naszych węzłów są w bardzo wolnej sieci i czekają na potwierdzenie po każdym pakiecie opóźniającym publikację.

Czy jest jakiś sposób na spakowanie wszystkich odczytów czujników do jednego pakietu TCP, publikując je w osobnych tematach i utrzymując QOS = 1?

MLu
źródło

Odpowiedzi:

7

Wygląda na to, że sdk IoT aws używa synchronicznego publikowania (ponieważ używa kodu powrotu), więc blokuje każdą wiadomość.

Na poziomie protokołu MQTT nie ma powodu, dla którego nie można mieć jednocześnie wielu wiadomości w locie, więc można spojrzeć na używanie klienta asynchronicznego paho, aby można było czekać na odpowiedź QOS1 bez blokowania publikowania następnej wiadomości.

Inną opcją byłoby opublikowanie tylko jednego złożonego komunikatu ze wszystkimi wartościami czujników za jednym razem i podzielenie go po stronie konsumenta.

hardillb
źródło
1
Tak długo, jak nie martwi się kodem odpowiedzi. Jeśli otrzymasz brak 200 OKodpowiedzi, czy to oznacza, że ​​obie operacje zakończyły się niepowodzeniem? Tylko jeden? Jeśli tak, to jaki?
Mawg mówi o przywróceniu Moniki
Nadal możesz sprawdzić kod powrotu, wystarczy sprawdzić go względem tokenu zwróconego z publikacji, aby wiedzieć, z którym to kodem się odnosi.
hardillb
Ale w przeciwieństwie do SUBSCRIBE, nie możemy ustawić szeregu tematów i odpowiadających im komunikatów w tym samym komunikacie MQTT, prawda?
cogitoergosum
hardillb powiedziałeś: „ Inną opcją byłoby opublikowanie tylko jednego złożonego komunikatu ze wszystkimi wartościami czujnika za jednym razem i podzielenie go po stronie konsumenta”. Rozumiesz przez to symbol wielopoziomowy ?
user170106
1
@ user170106 Nie, łączenie wszystkich aktualizacji w jedną wiadomość oznaczałoby, że musisz subskrybować tylko jeden temat.
hardillb