Puis-je publier plusieurs sujets MQTT dans une seule demande?

10

J'ai un appareil avec plusieurs capteurs qui publie chaque lecture de capteur séparément sur des sujets comme

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

Nous le transmettons à AWS IoT à l'aide d'Amazon AWS IoT SDK, c'est-à-dire

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

Chaque appel génère un paquet TCP distinct et une réponse distincte du courtier AWS MQTT. Le problème est que certains de nos nœuds sont sur un réseau très lent et attendent ACK après chaque paquet retarde la publication.

Existe-t-il un moyen de regrouper toutes les lectures du capteur dans un seul paquet TCP, tout en les publiant dans des rubriques distinctes et en conservant la QOS = 1?

MLu
la source

Réponses:

7

Il semble que le sdk aws IoT utilise une publication synchrone (car il utilise un code retour), il bloque donc chaque message.

Il n'y a aucune raison au niveau du protocole MQTT que vous ne puissiez pas avoir plusieurs messages en vol à la fois afin que vous puissiez envisager d'utiliser le client asynchrone paho afin que l'attente de la réponse QOS1 puisse se faire sans bloquer la publication du message suivant.

Une autre option serait de publier un seul message composite avec toutes les valeurs de capteur en une seule fois et de le diviser du côté du consommateur.

hardillb
la source
1
Tant qu'il ne s'inquiète pas du code de réponse. Si vous obtenez une non- 200 OKréponse, cela signifie-t-il que les deux opérations ont échoué? Seulement un? Si oui, lequel?
Mawg dit réintégrer Monica le
Vous pouvez toujours vérifier le code de retour, il vous suffit de le comparer au jeton renvoyé par la publication pour savoir à quoi il se rapporte.
hardillb
Mais, contrairement à SUBSCRIBE, nous ne pouvons pas configurer un tableau de sujets et leurs messages correspondants dans le même message MQTT, non?
cogitoergosum