我可以在一个请求中发布多个 MQTT 主题吗?

物联网 MQTT aws-iot
2021-06-14 00:32:13

我有一个带有多个传感器的设备,可以将每个传感器读数分别发布到诸如

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

我们使用 Amazon AWS IoT SDK 将其提供给 AWS IoT,即

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

每个调用都会生成一个单独的 TCP 数据包和来自 AWS MQTT 代理的单独响应。问题是我们的一些节点在一个非常慢的网络上并在每个数据包延迟发布后等待 ACK。

有没有办法将所有传感器读数捆绑到一个 TCP 数据包中,同时将它们发布到单独的主题中并保持 QOS=1?

1个回答

看起来 aws IoT sdk 正在使用同步发布(因为它使用返回码),因此它对每条消息都进行了阻塞。

在 MQTT 协议级别,您没有理由不能同时传输多条消息,因此您可以考虑使用 paho 异步客户端,以便可以在不阻止下一条消息发布的情况下等待 QOS1 响应。

另一种选择是一次性发布一个包含所有传感器值的复合消息,并在消费者端将其拆分。