Руководство для начинающих по сохраненным сообщениям MQTT

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

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

Как показано ниже, когда клиент подписывается на тему, если есть сохраненное сообщение для этой темы, сообщение отправляется клиенту немедленно.

Сохраненные сообщения MQTT

Когда использовать сохраненные сообщения MQTT?

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

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

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

Как использовать сохраненные сообщения MQTT?

Для клиентских SDK MQTT обычно существуют API или параметры для установки Retain флаг. Например клиентская библиотека paho MQTT Javaи клиент Erlang MQTT emqtt.

Для клиентских приложений MQTT с командной строкой или графическим интерфейсом вы сможете найти, где установить Retain флаг.

В этом посте мы не будем углубляться в SDK для программирования. Мы попробуем продемонстрировать сохраненные сообщения MQTT, используя кроссплатформенный настольный клиент MQTT 5.0 с открытым исходным кодом — MQTT X.

Если вы запускаете приложение MQTT X в первый раз, вы увидите главное окно ниже. Нажмите на New Connection кнопку, чтобы создать соединение MQTT.

Создать MQTT-соединение

Нам нужно только заполнить соединение Name а остальные параметры оставьте по умолчанию. Host по умолчанию будет публичный MQTT-брокер предоставлено Облако EMQX. Наконец, нажмите на Connect кнопку в правом верхнем углу, чтобы создать соединение MQTT.

Создать MQTT-соединение

После успешного подключения опубликуйте сообщение в теме sensor/t1 в поле ввода сообщения.

Опубликовать MQTT-сообщение

Далее мы ставим галочку Retain и публикуем два сохраненных сообщения в теме. sensor/t2.

Публикация сохраненных сообщений MQTT

Затем щелкните New Subscription кнопка создания подписки.

Создать подписку MQTT

Подписываемся на шаблонную тему sensor/+, которые будут соответствовать темам sensor/t1 и sensor/t2.

Посетите блог Понимание тем и подстановочных знаков MQTT в зависимости от случая Больше подробностей.

Подпишитесь на тему подстановочных знаков MQTT

Наконец, мы увидим, что подписка успешно получает второе сохраненное сообщение, а не обычное сообщение для sensor/t1 ни первое сохраненное сообщение для sensor/t2. Это показывает, что MQTT Broker будет хранить только последнее сохраненное сообщение для каждой темы.

Получение сохраненных сообщений MQTT

Вопросы и ответы о сохраненных сообщениях MQTT

Как я узнаю, что сообщение является сохраненным?

Когда сообщение исходит от Retain хранение в брокере, Retain установлен флаг, поэтому подписчик знает, что это не новое сообщение после его подписки.

То есть, если сохраненное сообщение будет опубликовано после подписки, подписчик получит его как обычное сообщение (без Retain флаг). Если после доставки сохраненного сообщения подписчик желает снова получить сохраненное сообщение, ему необходимо повторно подписаться.

В примере ниже мы подписываемся на тему sensor/t2 а затем опубликовать сохраненное сообщение в теме, подписчик получает сообщение немедленно, но без флага «сохранить». Потом удаляем подписку и заново подписываемся на sensor/t2 для повторного получения сообщения с установленным флагом «сохранить».

Сохраненные сообщения MQTT

Как долго сохраняются сохраненные сообщения? Как это удалить?

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

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

  • Когда клиент публикует сохраненное сообщение с пустой полезной нагрузкой в ​​теме, брокер удаляет сохраненное сообщение в этой теме.
  • Удалить в MQTT Broker, например, EMQX MQTT Broker предоставляет возможность удалять сохраненные сообщения из API управления или из информационной панели.
  • В протокол MQTT 5.0 добавлено свойство Message Expiry Interval, которое можно использовать для установки времени истечения срока действия сообщения при публикации. Сообщение будет автоматически удалено по истечении времени истечения, независимо от того, является ли оно сохраненным сообщением.

Сохраненные сообщения MQTT в EMQX

EMQX является самым популярным брокером MQTT, который скачали более 10 миллионов раз по всему миру. Недавно, EMQX выпустил версию 5.0который достиг 100 миллионов соединений MQTT + пропускная способность 1 миллион сообщений в секунду через кластер из 23 узлов, что делает EMQX 5.0 самым масштабируемым брокером MQTT в мире на данный момент.

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

docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:latest

После успешной установки используйте свой браузер, чтобы посетить чтобы испытать новую панель мониторинга EMQX 5.0.

Имя пользователя по умолчанию — admin, а пароль — общедоступный.

После успешного входа в систему вы можете нажать кнопку Configuration->MQTT меню для просмотра списка сохраненных сообщений. Вы также можете просмотреть полезные данные сохраненных сообщений или удалить сохраненное сообщение.

![MQTT Retained Messages in EMQX](https://assets.emqx.com/images/125fb714b5ab0eae6689fe305795d
0e2.png?imageMogr2/миниатюра/1520x)

Нажать на Settings меню под Retainerи вы увидите, что EMQX поддерживает установку Хранилища (памяти или диска), Максимального количества сохраненных сообщений, Срока действия и других параметров на панели управления.

Настройка сохраненных сообщений MQTT

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

Кроме того, протокол MQTT имеет еще много ценных функций. Ознакомьтесь с EMQ Начало работы с MQTT и дополнительные возможности серию статей для более глубокого понимания, изучения более продвинутых приложений MQTT и начала разработки приложений и сервисов MQTT.

Первоначально опубликовано на https://www.emqx.com.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *