Курсовые - Программа отправки и получения текстовых сообщений

АРХИТЕКТУРА MQTT-СИСТЕМ

3.1     Понятие MQTT-брокер

 

MQTT или Message Queue Telemetry Transport – это легкий, компактный и открытый протокол обмена данными созданный для передачи данных на удалённых локациях, где требуется небольшой размер кода и есть ограничения по пропускной способности канала. Вышеперечисленные достоинства позволяют применять его в системах M2M (Машинно-Машинное взаимодействие) и IIoT (Промышленный Интернет вещей).

Также существует версия протокола MQTT-SN (MQTT for Sensor Networks), ранее известная как MQTT-S, которая предназначена для встраиваемых беспроводных устройств без поддержки TCP/IP сетей, например, Zigbee.

Основные особенности протокола MQTT:

- Асинхронный протокол;

- Компактные сообщения;

- Работа в условиях нестабильной связи на линии передачи данных;

- Поддержка нескольких уровней качества обслуживания (QoS);

- Легкая интеграция новых устройств;

Протокол MQTT работает на прикладном уровне поверх TCP/IP (рисунок 3.1) и использует по умолчанию 1883 порт (8883 при подключении через SSL).

*Рисунок 3.1 – Протокол MQTT в файле "Формулы и диаграмы"*

Обмен сообщениями в протоколе MQTT осуществляется между клиентом (client), который может быть издателем или подписчиком (publisher/subscriber) сообщений, и брокером (broker) сообщений (например, Mosquitto MQTT).

Издатель отправляет данные на MQTT брокер, указывая в сообщении определенную тему, топик (topic). Подписчики могут получать разные данные от множества издателей в зависимости от подписки на соответствующие топики.

Устройства MQTT используют определенные типы сообщений для взаимодействия с брокером, ниже представлены основные:

- Connect – установить соединение с брокером;

- Disconnect – разорвать соединение с брокером;

- Publish – опубликовать данные в топик на брокере;

- Subscribe – подписаться на топик на брокере;

- Unsubscribe – отписаться от топика;

Схема простого взаимодействия между подписчиком, издателем и брокером представлена на рисунке 3.2.

*Рисунок 3.2 - Схема простого взаимодействия между подписчиком, издателем и брокером в файле "Формулы и диаграмы"*

Брокер является основным элементом системы "издатель-подписчик". Он отвечает за прием всех сообщений, их фильтрацию, принятие решения о том, кому интересны эти сообщения, и, в конечном итоге, за пересылку сообщений всем клиентам-подписчикам.

 

a. Виды MQTT-брокеров

 

Среди серверных реализаций брокера можно выделить IBM WebSphere MQ; открытое ПО Mosquitto; решение, основанное на облачном сервисе Eurotech Everywhere Device Cloud; легко масштабируемый и высокопроизводительный открытый сервер emqttd, последняя версия (0,17) позволяет обслуживать 1,3 миллиона соединений; брокер HiveMQ, обеспечивающий корпоративную безопасность и максимальную масштабируемость.

 

b. Краткое описание функционала и способов настройки MQTT-брокеров RSMB и Mosquitto и Amazon

 

Mosquitto - это брокер сообщений с открытым исходным кодом (лицензированный EPL / EDL), который реализует протоколы MQTT версий 3.1 и 3.1.1. Mosquitto легок и подходит для использования на всех устройствах от одноплатных компьютеров с низким энергопотреблением до полных серверов.

Протокол MQTT обеспечивает легкий метод осуществления обмена сообщениями с использованием модели публикации / подписки. Это делает его пригодным для обмена сообщениями через Интернет, например, с датчиками малой мощности или мобильными устройствами, такими как телефоны, встроенные компьютеры или микроконтроллеры.

Проект Mosquitto также предоставляет библиотеку C для реализации клиентов MQTT и очень популярных клиентов MQTT командной строки mosquitto_pub и mosquitto_sub.

Начать работу с Amazon MQ легко. Запустить брокер сообщений можно за считаные минуты в Консоли управления AWS или с помощью интерфейса командной строки (CLI).

          Amazon MQ обеспечивает стартовую настройку и выполнение текущих административных задач: обновление версий ПО и компонентов безопасности, обнаружение сбоев и восстановление. Сервис интегрирован с Amazon CloudWatch, что позволяет отслеживать текущие метрики и создавать уведомления о потенциальных проблемах. К примеру, можно вести мониторинг глубины очереди или создавать предупреждения в случае сбоев в доставке сообщений.

 

c. Понятие темы (topic)

 

Топики представляют собой символы с кодировкой UTF-8. Иерархическая структура топиков имеет формат «дерева», что упрощает их организацию и доступ к данным. Топики состоят из одного или нескольких уровней, которые разделены между собой символом «/».

Пример топика в который датчик температуры, расположенный в спальной комнате публикует данные брокеру:

/home/living-space/living-room1/temperature

Подписчик может так же получать данные сразу с нескольких топиков, для этого существуют wildcard. Они бывают двух типов: одноуровневые и многоуровневые. Для более простого понимания рассмотрим в примерах каждый из них:

- Одноуровневый wildcard. Для его использования применяется символ «+»

К примеру, нам необходимо получить данные о температуры во всех спальных комнатах:

/home/living-space/+/temperature

В результате получаем данные с топиков:

/home/living-space/living-room1/temperature

/home/living-space/living-room2/temperature

/home/living-space/living-room3/temperature

- Многоуровневый wildcard. Для его использования применяется символ «#»

К примеру, чтобы получить данные с различных датчиков всех спален в доме:

/home/living-space/#

В результате получаем данные с топиков:

/home/living-space/living-room1/temperature

/home/living-space/living-room1/light1

/home/living-space/living-room1/light2

/home/living-space/living-room1/humidity

/home/living-space/living-room2/temperature

/home/living-space/living-room2/light1

 

  1.  Перечень и формат MQTT-команд

 

Сообщения MQTT содержат обязательный заголовок фиксированной длины (2 байта) и необязательный заголовок переменной длины конкретного сообщения и полезную нагрузку сообщения.

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

MQTT использует сетевой порядок байтов и битов

*Рисунок 3.3 – Формат сообщения MQTT в файле "Формулы и диаграмы"*

DUP - флаг дубликата сообщения. Указывает получателю, что это сообщение, возможно, уже было получено.

QOS - указывает уровень гарантии доставки сообщения PUBLISH.

0 - Доставка не более одного раза, без гарантий, «Отправь и забудь».

1 - Доставка как минимум один раз, подтвержденная доставка.

2 - Доставка ровно один раз

          Retain - указывает серверу сохранить последнее полученное сообщение PUBLISH и доставить его в качестве первого сообщения.

*Рисунок 3.4 – Перечень команд MQTT в файле "Формулы и диаграмы"*

Рассмотрим более детально процесс установления соединения, посылки и приема сообщений (см. рис. 3.5).

*Рисунок 3.5 – Сценарий установления соединения и обмена сообщениями. в файле "Формулы и диаграмы"*

Установление соединения начинается с передачи от клиента брокеру сообщения CONNECT, в котором указываются:

- ClientId – уникальный идентификатор для каждого клиента, подключающегося к брокеру;

- CleanSession – флаг удаления сохраненных сообщений из предыдущих сессий для данного клиента;

- Username/Password – имя пользователя и пароль для идентификации и авторизации клиента.

- KeepAlive – временной интервал, регулирующий передачу ping-запро-сов и ping-ответов для контроля отключения одной из сторон.

Брокер в ответ посылает клиенту сообщение CONACK, состоящее из:

- Session Present Flag – указывает существуют ли для данного клиента действующие сессии от предыдущих подключений;

- Connect Аcknowledge Flag – сообщает клиенту об успешном подключении или о каких-либо ошибках.

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

- Topic Name – название темы, к которой относится данное сообщение. Данное поле является обязательным, так как MQTT-брокер принимает решение о пересылке того или иного сообщения клиенту, исходя из тем, на которые клиент подписан;

- Специальные флаги – QoS, DUP и RETAIN.

- Полезная нагрузка, где передаются сами данные.

Таким образом, после получения сообщения PUBLISH брокер отправляет подтверждение приема публикации (если это задано QoS) и пересылает полученное сообщение всем клиентам, которые подписаны на данную тему.

Чтобы получать сообщения с необходимыми данными, MQTT-клиент должен сначала подписаться на их получение с помощью сообщения SUBSCRIBE. Данное сообщение состоит из двух частей:

- Packet Identifier – необходимо для QoS 1 и QoS 2;

- List of Subscriptions – названия тем, на которые клиент хочет подписаться, и необходимое значение QoS.

Стоит отметить, что в протоколе MQTT принята иерархическая структура построения тем, поэтому для удобства применяются wildcard-символы, благодаря которым подписчик может подписаться на все подтемы данной темы (символ #) либо темы определенного уровня (символ +).

В ответ на сообщение SUBSCRIBE брокер отправляет клиенту подтверждение SUBACK, в котором сообщает о результате подписки (успешная или нет).

Также клиент может отписаться от темы, которая больше не представляет для него интереса, отправив брокеру сообщение UNSUBSCRIBE, в котором будет указана данная тема.

Брокер подтверждает отказ от информации по этой теме сообщением UNSUBACK.

 

 

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться
Дата Выполнено, %
2020-05-21 20:03:25 10
2020-05-14 13:24:06 70
2020-05-14 14:21:43 100
Открытая Для скрытия необходимо уменьшить величину статуса выполнения.