Запросить все опубликованные темы

Я использую Mosquitto для своего брокера MQTT.

Интересно, можно ли запросить все опубликованные темы?

Таким образом, НЕ подписываясь на все, то есть #.

РЕДАКТИРОВАТЬ: я не хочу подписываться на каждую доступную тему. Я просто ищу способ получить все опубликованные темы. Брокер может, например, ответить массивом строк, содержащим все опубликованные темы.


person gillesC    schedule 02.03.2017    source источник
comment
Чего именно вы здесь пытаетесь достичь? Подписка на огромный список тем вызовет дополнительные накладные расходы у брокера (поскольку он должен проверять все в списке) по сравнению с простой проверкой символа «#», который соответствует всему.   -  person hardillb    schedule 02.03.2017
comment
Я не говорю, что хочу подписаться на все. Я просто хочу запросить все опубликованные темы. Например, брокер может просто ответить массивом строк, содержащим все опубликованные темы. Я отредактировал свой вопрос, чтобы лучше отразить мои намерения.   -  person gillesC    schedule 02.03.2017


Ответы (4)


Управляемость брокеров MQTT на данный момент очень незрела. Я также не знаю, как получить список опубликованных тем у какого-либо брокера. Но есть усилия по стандартизации, например. с деревом тем $ SYS https://github.com/mqtt/mqtt.github.io/wiki/SYS-Topics.

Другие брокеры управляются через SNMP, например. MessageSight https://www.ibm.com/support/knowledgecenter/en/SSCGGQ_1.2.0/com.ibm.ism.doc/Monitoring/admin00008_.html. Он может перечислять темы в своем WEB-интерфейсе, но я не знаю программного способа их получить.

person Gambit Support    schedule 02.03.2017

Если вы отправите брокеру сообщение «КАЖДОЕ» с параметром «Сохранить сообщение = Истина», то вы сможете:

  1. Подключается к серверу с подпиской '#'
  2. Отметьте все сообщения сохранения и их тему (сохраните эти опубликованные темы)
  3. Отказаться от подписки '#'
  4. Подпишитесь на все темы, которые у вас есть
person Asoul    schedule 09.03.2017

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

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

person hardillb    schedule 02.03.2017
comment
Хранение активных тем можно настроить по максимальной продолжительности хранения или что-то в этом роде. - person gillesC; 02.03.2017

Обходной путь, не идеальный, но в некоторых случаях все же хороший:

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

Например: у этих ребят http://www.mqtt-dashboard.com/ есть общедоступный mqtt сервера, но нет никаких указаний на темы, по которым другие люди отправляют данные (и я хотел протестировать только подписную часть протокола, никаких данных для публикации). В качестве отправной точки я обнаружил в справочнике в сети, что их темы начинаются с "test /".

Запускаем это:

./mosquitto_sub -h broker.hivemq.com -t test/# -d

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

person Nelu Bidonelu    schedule 11.10.2019