Подтвердить что ты не робот

MQTT, какова цель или использование Last Will Testament?

Я, конечно, пропустил что-то о том, как работает весь протокол MQTT, поскольку я не могу понять шаблон использования сообщений Last Will Testament: какова их цель?
Одним из примеров, который я часто вижу, является информирование о том, что устройство отключено. Для меня это не имеет особого смысла, поскольку очевидно, что если устройство не публикует какие-либо данные, оно может быть отключено или могут возникнуть проблемы с сетью.

Итак, каковы практические применения LWT? Для чего он был изобретен?

4b9b3361

Ответ 1

Сообщения LWT на самом деле не связаны с обнаружением того, был ли клиент отключен или нет (эта задача обрабатывается сообщениями keepAlive). Сообщения LWT о , что происходит после того, как клиент отключен.

Аналогия - это реальная последняя воля: Если человек умирает, она может сформулировать завещание, в котором она заявляет, какие действия следует предпринять после ее смерти. Исполнитель будет учитывать эти пожелания и выполнять их от ее имени. Аналогия в мире MQTT заключается в том, что клиент может сформулировать завещание, в котором он заявляет, какое сообщение должно быть отправлено от имени брокером после того, как он отключился.

Фиктивный пример:

У меня есть датчик, который передает важные данные, но очень редко. Он сформулировал выражение последней заявки в виде [topic: '/ node/off-offline', message: ': id'], причем: id является уникальным идентификатором для датчика. У меня также есть аварийный абонент для темы "node/off-offline", который будет отправлять SMS на мой телефон каждый раз, когда сообщение будет опубликовано на этом канале.

При нормальной работе датчик будет поддерживать соединение с MKTT-брокером, отправив периодические сообщения keepAlive, перемеженные с фактическими показаниями датчика. Если датчик отключен, соединение с брокером будет отключено из-за отсутствия keepAlives.

Здесь находится LWT: если LWT не указан, брокер не заботится и просто закрывает соединение. В нашем случае, однако, брокер выполнит последний запрос датчика и опубликует LWT-сообщение '/ node/off-offline:: id'. Затем сообщение будет передано моему аварийному абоненту, и я получаю уведомление об идентификаторе датчика по SMS, чтобы я мог проверить, что происходит.

Короче:

Вместо того, чтобы просто закрыть соединение после того, как клиент отключен, сообщения LWT можно использовать для определения сообщения, которое будет опубликовано брокером от имени клиента, поскольку клиент находится в автономном режиме и больше не может публиковать.

Ответ 2

Просто потому, что устройство не публикуется, это не значит, что он не подключен к сети или существует проблема с сетью.

Возьмем, к примеру, датчик, который отслеживает значение, которое изменяется очень редко, хороший дизайн говорит о том, что датчик должен публиковать изменения только для уменьшения использования полосы пропускания, поскольку периодическое публикация того же значения является расточительным. Если значение опубликовано как сохраненное значение, то любой новый абонент всегда будет получать текущее значение, не дожидаясь изменения значения датчика и снова опубликовать его.

В этом случае LWT используется для публикации, когда датчик терпит неудачу (или существует сетевая проблема), поэтому мы знаем о проблеме, как только клиент будет продолжать работать.

Ответ 3

Подробную статью о сообщениях Last-Will-and-testament можно найти в серии сообщений блога MQTT Essentials: http://www.hivemq.com/mqtt-essentials-part-9-last-will-and-testament/.

Подводя итог сообщению в блоге:

Функция Last Will and Testament используется в MQTT для уведомления других клиентов о беспристрастно отключенном клиенте.

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