Протоколы / двоичные форматы

маски топиков MQTTс объяснением для каждой строки

Введите один фильтр подписки и по одному опубликованному топику на строку; выберите версию и сценарий.

маски топиков MQTT

Фильтр подписки

Опубликованные топики

Результат по строкам

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

Протокол и доставка

+ занимает один полный уровень, # — только последний. В публикуемом имени шаблоны запрещены.

Один фильтр и не более 1 000 строк. Пропускаются лишь пустые строки; пробелы и пустые уровни сохраняются.

Введите фильтр и топики для начала.

Когда публикация прошла, а подписчик не получил сообщение, маски топиков MQTT помогают найти разницу в уровнях, регистре, косых чертах или правиле для системных имён с $. Строки сравниваются без обрезки пробелов и нормализации.

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

Зачем проверять маски топиков MQTT?

Совпадение фильтра и начальная доставка — разные результаты.

Показать границу каждого шаблона

Маски топиков MQTT используют + для ровно одного уровня, а # в конце охватывает также родительский топик. Пустые уровни и системные имена с $ не исчезают при сравнении.

Дерево уровней топиков: одна ветка охватывает один уровень, другая родителя и потомков

Разделить фильтр и сохранённое сообщение

Обычная и общая подписки MQTT 5 могут совпасть с одним сохранённым топиком. Но новому участнику общей группы старая сохранённая публикация не отправляется; отчёт показывает оба ответа.

Две подписки совпадают с сохранённым топиком, но старое сообщение получает только обычная

Три проверки перед подпиской

01

Оставить имя без изменений

Вставьте реальные опубликованные имена по одному на строку. Регистр, пробелы, начальная косая черта и пустой уровень значимы; пропускаются только строки нулевой длины.

  • Пример с шаблонами показывает, почему + совпадает с пустым уровнем.
02

Выбрать версию и момент

MQTT 5 понимает $share/группа/фильтр как общую подписку; в стандарте 3.1.1 этого нет. Режим сохранённых сообщений проверяет лишь первую доставку уже имеющихся сообщений новому подписчику.

  • Пример общей подписки сразу включает MQTT 5 и режим сохранённых сообщений.
03

Прочитать причину по строке

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

  • Выключите автопроверку, чтобы запускать её через Ctrl/Cmd+Enter.

Как фильтр ведёт себя на каждом уровне

Правила + и # без glob

Подписка на топики по маске: + заменяет один полный уровень, # ставится только последним и включает родительский топик. Символы * и ? не превращаются в операторы glob. Фильтр тем с подстановочными знаками проверяется без преобразования в glob.

Список до тысячи имён

Один фильтр топика MQTT сравнивается с 1 000 опубликованных имён. Исходные номера строк сохраняются, неверные имена отделены от корректных несовпадений.

Общая подписка с учётом версии

В MQTT 5 префикс $share/группа/ удаляется перед сравнением; в 3.1.1 он остаётся обычными уровнями. Распределение по участникам брокера не предсказывается.

Границы локальной проверки

Публикуемое имя не является шаблоном
Знаки + и # работают только в фильтре подписки и занимают целый уровень; # допустим лишь в конце. В имени публикации они недопустимы. Начальный шаблон не ловит $SYS.
Стандартная общая подписка — MQTT 5
В режиме 3.1.1 $share сравнивается буквально. Частные расширения брокера и выбор конкретного получателя в группе здесь не моделируются.
Retain означает первую доставку
Каждая строка считается топиком с уже сохранённым сообщением. Для обычной подписки MQTT 5 предполагается Retain Handling 0; QoS, сессии, удаление и будущие публикации не учитываются.
Нет проверки прав на брокере
Маски топиков MQTT проверяются локально: сайт не подключается к брокеру и не смотрит ACL. Совпадение не доказывает, что подписка разрешена или сообщение реально доставлено.

Вопросы про маски топиков MQTT

Как подписаться на несколько MQTT-топиков по маске?

Используйте + для одного полного уровня или # в конце фильтра для родителя и всех потомков. Здесь можно проверить один фильтр сразу по списку конкретных имён.

Чем отличаются + и # в подписке на топики MQTT?

+ охватывает ровно один уровень, в том числе пустой. # ставится только последним полным уровнем и охватывает родителя и любое число уровней ниже.

Можно ли поставить # в середине маски топика?

Нет. Фильтр вида sensor/#/temp недопустим; инструмент покажет позицию ошибки. # должен быть последним уровнем или всем фильтром.

Почему сообщение не приходит по подписке на топик?

Проверьте первый несовпадающий уровень, регистр и исключение для имён с $. Даже при совпадении права ACL, соединение и состояние брокера могут помешать доставке.

Как подписаться на все топики брокера MQTT?

Фильтр # подходит к обычным топикам, но не к именам с начальным $. Для $SYS нужен отдельный явный фильтр $SYS/#; этот инструмент проверяет их по одному.

Остался вопрос о совпадении?

Проверить маски топиков MQTT

Вернитесь к вводу: маски топиков MQTT лучше проверять на реальном фильтре и списке имён; режим retain нужен только для первой доставки уже сохранённого сообщения.

Всё сравнение выполняется в браузере.