¿Puedo publicar múltiples temas MQTT en una sola solicitud?


10

Tengo un dispositivo con múltiples sensores que publica cada sensor leyendo por separado temas como

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

Lo alimentamos a AWS IoT usando Amazon AWS IoT SDK, es decir

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

Cada llamada genera un paquete TCP separado y una respuesta separada del agente de AWS MQTT. El problema es que algunos de nuestros nodos están en una red muy lenta y esperan ACK después de que cada paquete retrasa la publicación.

¿Hay alguna manera de agrupar todas las lecturas del sensor en un solo paquete TCP, mientras las publica en temas separados y mantiene la QOS = 1?

Respuestas:


7

Parece que aws IoT sdk está utilizando una publicación sincrónica (ya que está utilizando un código de retorno), por lo que está bloqueando cada mensaje.

No hay ninguna razón en el nivel del protocolo MQTT para que no pueda tener varios mensajes en vuelo a la vez, por lo que podría considerar el uso del cliente asincrónico paho para que pueda esperar la respuesta QOS1 sin bloquear la publicación del siguiente mensaje.

Otra opción sería publicar solo un mensaje compuesto con todos los valores del sensor de una vez y dividirlo en el extremo del consumidor.


1
Siempre y cuando no esté preocupado por el código de respuesta. Si obtiene una no 200 OKrespuesta, ¿eso significa que ambas operaciones fallaron? ¿Solo uno? ¿Si es así, Cuál?
Mawg dice que reinstalar a Mónica el

Todavía puede verificar el código de retorno, solo necesita verificarlo con el token devuelto por la publicación para saber con qué se relaciona.
hardillb

Pero, a diferencia de SUSCRIBIRSE, no podemos configurar una variedad de temas y sus mensajes correspondientes en el mismo mensaje MQTT, ¿verdad?
cogitoergosum
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.