我已经使用 Mosquitto 编写了代码 (mosquitto_publish()
),将数据发布到 AWS。
我的问题是数据到达 MQTT 代理的顺序。在 Paho 客户端中,我看到 waitForCompletion()
,但在 Mosquitto 中没有类似的情况。有人可以帮我解决这个问题吗?
最佳答案
基于mosquitto_publich documentation ,当发送“成功”时该函数返回。 MQTT 不保证消息到达的顺序,因此您应该关注到达而不是发送,并避免两条消息相互竞争到代理。使用 QoS 0,客户端永远不知道消息是否到达;需要 QoS 1 或 2,为此需要交换额外的通信。提高服务质量,您可以使用mosquitto_max_inflight_messages_set (mosq, 1) 以便客户端将任何其他消息排队,直到收到服务器的确认。这可能比“等待”完成更有效,因为非 MQTT 操作可以继续。如果您突发发送大量消息,队列可能会堆积起来。
更复杂的替代方案是不受限制地发送消息,但每个消息都包含一个索引,以便订阅者可以在收到消息时对它们进行排序(为此,它需要自己的队列和延迟)。如果此负担将落在多个订阅者身上,则不建议这样做。
关于c - 如何使用mosquitto_publish同步发布数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55143474/