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


10

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

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?

Answers:


7

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

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

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


1
只要他不担心响应代码。如果没有200 OK响应,是否表示这两个操作都失败了?只有一个?如果是这样,哪一个?
Mawg说要恢复莫妮卡的时间

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

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

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

1
@ user170106不,将所有更新捆绑到一条消息中意味着您只需要订阅一个主题。
哈迪尔布
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.