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

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。 ,同时将它们发布到单独的主题中并保持QOS = 1?

#1 楼

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

在MQTT协议级别没有理由没有理由多条消息同时运行,因此您可以考虑使用paho异步客户端,这样就可以在不阻止下一条消息发布的情况下完成QOS1响应。

另一种选择是仅发布一则消息,其中包含所有传感器值,并在消费者端将其拆分。

评论


只要他不担心响应代码。如果收到非200 OK响应,是否表示这两个操作都失败了?只有一个?如果是这样,哪一个?

–莫格说要恢复莫妮卡
17年7月12日在7:52

您仍然可以检查返回码,只需将其与发布返回的令牌对照即可,以了解它与哪一个相关。

– hardillb
17年7月12日在8:15

但是,与SUBSCRIBE不同,我们无法在同一MQTT消息中设置主题及其对应消息的数组,对吗?

– cogitoergosum
18年6月16日在3:55

您告诉hardillb:“另一种选择是只发布一则包含所有传感器值的复合消息,然后在消费者端将其拆分。”您是说多级通配符吗?

–user170106
20-4-24在11:22

@ user170106不,将所有更新捆绑到一条消息中意味着您只需要订阅一个主题。

– hardillb
20-04-24在12:09