Posso pubblicare più argomenti MQTT in una singola richiesta?


10

Ho un dispositivo con più sensori che pubblica ciascun sensore leggendolo separatamente su argomenti come

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

Lo forniamo ad AWS IoT usando Amazon AWS IoT SDK, ad es

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

Ogni chiamata genera un pacchetto TCP separato e una risposta separata dal broker AWS MQTT. Il problema è che alcuni dei nostri nodi sono su una rete molto lenta e in attesa di ACK dopo che ogni pacchetto ritarda la pubblicazione.

Esiste un modo per raggruppare tutte le letture del sensore in un singolo pacchetto TCP, pubblicandole in argomenti separati e mantenendo il QOS = 1?

Risposte:


7

Sembra che aws IoT sdk stia utilizzando una pubblicazione sincrona (in quanto utilizza un codice di ritorno), quindi si blocca per ogni messaggio.

Non vi è alcun motivo a livello di protocollo MQTT che non si possano avere più messaggi contemporaneamente in volo in modo da poter utilizzare il client asincrono paho in modo che l'attesa sulla risposta QOS1 possa essere effettuata senza bloccare la pubblicazione del messaggio successivo.

Un'altra opzione sarebbe quella di pubblicare un solo messaggio composito con tutti i valori del sensore in una volta sola e suddividendolo alla fine del consumatore.


1
Solo finché non è preoccupato per il codice di risposta. Se ricevi una mancata 200 OKrisposta, vuol dire che entrambe le operazioni sono fallite? Solo uno? In tal caso, quale?
Mawg dice di ripristinare Monica il

Puoi ancora controllare il codice di ritorno, devi solo confrontarlo con il token restituito dalla pubblicazione per sapere a quale si riferisce.
hardillb

Ma, a differenza di ISCRIVITI, non possiamo impostare una serie di argomenti e i loro messaggi corrispondenti nello stesso messaggio MQTT, giusto?
cogitoergosum,

hardillb hai detto " Un'altra opzione sarebbe quella di pubblicare un solo messaggio composito con tutti i valori del sensore in una volta sola e suddividendolo alla fine del consumatore". Con questo intendi il jolly multi-livello ?
user170106

1
@ user170106 No, raggruppare tutti gli aggiornamenti in un singolo messaggio significherebbe che devi solo iscriverti a un singolo argomento.
hardillb
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.