Как опубликовать данные синхронно с помощью mosquitto_publish? - PullRequest
0 голосов
/ 13 марта 2019

Я написал код (mosquitto_publish()), используя Mosquitto для публикации данных в AWS.

Моя проблема заключается в последовательности поступления данных в брокер MQTT. В клиенте Paho я вижу waitForCompletion(), но в Mosquitto ничего похожего. Кто-нибудь, пожалуйста, помогите мне решить эту проблему?

1 Ответ

0 голосов
/ 16 марта 2019

На основании документации mosquitto_publich функция возвращается, когда отправка была "успешной". MQTT не гарантирует порядок, в котором сообщения прибывают , поэтому вы, вероятно, должны следить за прибытием, а не за отправкой, и избегать того, чтобы два сообщения передавались друг другу брокеру.При QoS 0 клиент никогда не знает, поступило ли сообщение;это требует QoS 1 или 2, для которого обмениваются дополнительными коммуникациями.Повысьте качество обслуживания, и вы можете использовать mosquitto_max_inflight_messages_set (mosq, 1), чтобы клиент помещал в очередь любые дополнительные сообщения, пока не получит подтверждение от сервера.Это может быть даже более эффективным, чем «ожидание» завершения, поскольку операции, не относящиеся к MQTT, могут продолжаться.Очередь может накапливаться, если вы отправляете пакеты из многих сообщений.

Более сложная альтернатива - отправлять сообщения без ограничений, но включать индекс для каждого, чтобы подписчик мог отсортировать их при получении (для чего он будетнужна своя очередь и задержка).Не рекомендуется, если это бремя будет ложиться на нескольких подписчиков.

...