Несколько MQTT тем: как собрать согласованный снимок
Увеличить схему
Шлюз передаёт давление, состояние насоса и диагностический флаг отдельными публикациями. Диспетчерский экран может случайно объединить новые и старые поля, если считает последние полученные значения одним снимком. Для согласованного представления нужно определить общий измерительный контекст, а не надеяться на удобный порядок прихода разных тем.
Определить требуемую согласованность
MQTT5 описывает собственные условия доставки и порядка сообщений. (OASIS — MQTT Version5.0, Standard2019-03-07) Из них нельзя произвольно вывести атомарный снимок разных тем, издателей и обработчиков. Сначала решите, какие поля должны относиться к одному циклу устройства и для какой задачи это действительно необходимо.
Если значения независимы, показывайте собственное время и качество каждого. Если приложение использует их совместно, предусмотрите идентификатор снимка либо единое сообщение с документированной структурой. Выбор является частью прикладного контракта и должен учитывать возможности существующего шлюза.
Создать учебную последовательность
Подготовьте два условных цикла с различимыми номерами и значениями. Во втором измените только часть полей. Передайте события так, чтобы один компонент пришёл позднее остальных. Не подключайте этот опыт к реальному управлению: достаточно проверить сборщик и отображение на стенде.
Ожидаемый результат опишите до запуска. Полный набор одного цикла может отображаться как согласованный, а неполный должен сохранять соответствующий признак. Нельзя молча подставлять поле предыдущего цикла и при этом оставлять общую отметку полной актуальности всего набора.
Проверить повторы и поздние части
Добавьте повтор одного компонента и запоздавшее сообщение старого цикла. Сборщик должен различать дополнение текущего набора и поступление исторической части. Правило завершения и срок ожидания задают по требованиям приложения, не объявляя универсальный интервал для всех датчиков.
При нескольких издателях уточните, кто создаёт общий идентификатор и как согласуется физический момент измерения. Одинаковые календарные секунды не всегда означают одновременность. Погрешность часов и последовательный опрос входов должны оставаться частью контекста.
Сохранить прозрачный результат
В архиве полезно хранить исходные события и результат сборки с указанием правила. Тогда можно объяснить, почему экран показал неполный набор или отнёс позднее поле к прошлому циклу. Скрытая сортировка только по времени серверного поступления затрудняет такое объяснение.
Приёмка завершается проверкой штатного порядка, задержки части, повтора и перезапуска сборщика. В каждом случае подтверждают смысл полученного снимка. Это даёт хозяйству проверяемую согласованность данных без необоснованного обещания, что любой обмен по нескольким MQTT темам автоматически является одной транзакцией измерения.
Запросы отправляются на наш e-mail из вашей почтовой программы.