我已经使用Mosquitto编写了代码(mosquitto_publish()
)以将数据发布到AWS。
我的问题是数据到达MQTT代理的顺序。在Paho客户中,我看到了waitForCompletion()
,但在Mosquitto中却没有任何相似之处。有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
基于mosquitto_publich documentation,当发送“成功”时,该函数返回。 MQTT不保证消息到达的顺序,因此可以说,您应该注意消息的到达而不是发送,并且要避免两条消息相互竞争。 QoS为0时,客户端永远不知道消息是否到达;需要QoS 1或2的交换额外的通信。提高服务质量,您可以使用mosquitto_max_inflight_messages_set(mosq,1),以便客户端将所有其他消息排队,直到它从服务器收到确认为止。这可能比“等待”完成更为有效,因为非MQTT操作可以继续进行。如果发送大量消息,则队列可能堆积。
更复杂的选择是不加限制地发送消息,但每个消息都包含一个索引,以便订户可以在收到消息时对其进行排序(为此,它需要自己的队列和延迟)。如果此负担将由多个订阅者承担,则不建议使用。