Возможности

Брокер писался как рабочий инструмент: всё, что перечислено ниже, настраивается в панели и работает без перезапуска.

Протокол

Две версии сразу

MQTT 3.1.1 и MQTT 5.0 работают одновременно на одном порту, клиенты разных версий свободно обмениваются сообщениями. Кодек разбирает и собирает все 15 типов пакетов, проверяет границы Variable Byte Integer, дубли свойств и зарезервированные биты.

QoS 0, 1 и 2

Полные рукопожатия, подавление дублей на QoS 2, переотправка незавершённых обменов после переподключения. Оффлайн-очереди постоянных сессий переживают перезапуск брокера.

Retain и Last Will

Retain-хранилище с очисткой пустым payload, в том числе ветками, Retain Handling 0/1/2 и Retain As Published. Will отправляется во всех сценариях разрыва, включая Will Delay Interval у пятой версии.

Возможности пятой версии

Псевдонимы тем в обе стороны, Session Expiry, Receive Maximum и контроль потока, Maximum Packet Size, идентификаторы подписок, общие подписки $share, No Local, Message Expiry, Payload Format Indicator с проверкой UTF-8, Content Type, Response Topic, Correlation Data, User Properties, коды причин во всех пакетах, серверный DISCONNECT, пакет AUTH.

Системные темы $SYS

Версия, аптайм, счётчики клиентов, сообщений, байт и ошибок публикуются retain-сообщениями. Ветка закрыта по умолчанию: подстановки не достают до $-тем, анонимным клиентам весь namespace запрещён, а рубильник в настройках выключает публикацию целиком.

Веб-панель

Обзор

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

Клиенты и темы

Таблица сессий с карточкой клиента, отключение и удаление сессии. Отдельно — активные подписки со всеми опциями MQTT 5.0 и содержимое retain-хранилища.

Трафик и публикация

Живой поток сообщений и событий брокера с фильтром и паузой. Из панели можно опубликовать сообщение со всеми свойствами пятой версии — удобно для отладки устройств.

Семь языков и две темы

Русский, английский, немецкий, испанский, французский, итальянский и китайский. Тёмная и светлая темы переключаются на лету, выбор запоминается как умолчание панели.

Встроенная справка

Руководство с оглавлением прямо в панели, переведённое на все семь языков — не нужно искать документацию отдельно.

Доступ и безопасность

Два независимых контура

Администратор панели — один, задаётся в config.json и управляет только веб-интерфейсом. MQTT-устройства — отдельный список учёток со своими паролями и правами. Завести MQTT-пользователя с именем администратора нельзя.

ACL по темам

Правило — это фильтр, доступ (read, write, readwrite) и разрешение или запрет. Проверка идёт сверху вниз до первого совпадения, всё deny-by-default. Плейсхолдер $u разворачивается в имя клиента, поэтому правило $u/# замыкает каждое устройство в его ветке. Порядок правил меняется перетаскиванием.

Шесть источников учёток

Внутренний список, MySQL/MariaDB (схема в стиле EMQX), SQLite, CSV с перечитыванием файлов, JWT и внешний HTTP-сервис. Источник переключается прямо в панели: сначала проверяется кнопкой «Проверить», потом применяется на лету.

Хеши, а не пароли

Пароли хранятся как PBKDF2-HMAC-SHA256 с 210 000 итераций и случайной солью. Токены сессий и API лежат только в виде хешей. Внешние источники понимают plain, sha256, sha512, bcrypt и pbkdf2.

TLS из коробки

Самоподписанный сертификат генерируется при первом запуске, чтобы :8883 работал сразу. Для продакшена свой сертификат подставляется в конфиге.

Правила и потоки

Перезапись тем

Имя темы подменяется на лету при публикации, подписке или всегда: MQTT-фильтр для дешёвого отбора, регулярное выражение и шаблон новой темы с группами $1…$9. Доступны %u и %c, префикс $share сохраняется, UNSUBSCRIBE проходит ту же перезапись. В панели есть песочница для проверки правила.

Автоподписка

Клиент получает подписки сразу после подключения, без SUBSCRIBE. Поддерживаются %u и %c и все опции пятой версии, права ACL проверяются как обычно — запрещённое правило молча пропускается, соединение не рвётся.

Ограничения по темам

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

Защита от флуда

Token bucket на каждое подключение: сообщений в секунду, всплеск, байт в секунду, всплеск байт. Превышение не рвёт соединение и не теряет сообщения — брокер делает паузу перед следующим чтением из сокета, TCP закрывает окно, и отправитель замедляется сам.

Отложенная публикация

Тема $delayed/{секунды}/{тема} придерживается брокером до срока, совместимо с EMQX. Интервал от секунды до 49 суток, подтверждение приходит сразу, очередь переживает перезапуск и видна в панели с обратным отсчётом.

Интеграция

Мост между брокерами

Брокер подключается как клиент к другому MQTT-брокеру и пересылает темы в обе стороны. Настраиваются адрес, логин, TLS, версия протокола и правила «фильтр + направление + QoS + префиксы». Есть защита от петель, авто-переподключение, No Local на пятой версии и счётчики в панели.

REST API

Весь функционал панели доступен по bearer-токену: статистика, клиенты, подписки, retain, публикация, события, пользователи, настройки, мосты, правила, отложенные сообщения, импорт и экспорт. Токен можно выдать только на чтение.

Управление устройствами из своей системы

POST /api/users заводит устройство вместе с правами, PATCH меняет пароль или ACL, DELETE удаляет. Изменения применяются мгновенно: брокер сам разрывает живые соединения этого пользователя, чтобы новые правила действовали сразу.

MQTT over WebSocket

Подпротокол mqtt на том же порту, что и панель — браузерные клиенты подключаются без отдельного шлюза. Реализация RFC 6455 поверх net/http, без зависимостей.

Импорт и экспорт

Настройки, пользователи и правила выгружаются одним файлом и загружаются обратно — перенос на другой сервер не требует ручного повторения.

Эксплуатация

Один файл, никаких зависимостей

Статически слинкованный бинарник на чистом Go: ни runtime, ни libc, ни внешней базы. Работает на Debian и Ubuntu из коробки, собирается под amd64, arm64 и armhf.

Хранилище на SQLite

Retain пишется сразу при каждом изменении, постоянные сессии — снимком раз в десять секунд и при остановке, отложенные — при постановке в очередь. Просроченное отбрасывается при старте, в лог идёт строка state restored.

Состояние машины

Загрузка процессора, занятая память и место на диске с данными — стандартной библиотекой, без cgo, отдельной реализацией под Linux и Windows. Полоса желтеет после 75 % и краснеет после 90 %.

systemd и nginx

В комплекте юнит systemd, конфиг nginx и идемпотентный установочный скрипт: панель слушает только localhost и открывается наружу через nginx, MQTT-порты работают напрямую.

Штамп сборки

Версия, номер сборки и время сборки вшиты в бинарник, видны в панели, в разделе «О программе» и по флагу -version — всегда понятно, что именно запущено.

Всё это — бесплатно

Ограничений по числу устройств, сообщений или подписок нет.

Скачать брокер