В разделе «Лучшие практики» в блоге HiveMQ не следует подписываться на многоуровневый подстановочный знак при попытке выгрузить все сообщения в базу данных. Они утверждают, что подписывающийся клиент может не справиться с высокой загрузкой сообщений, и предлагают вместо этого использовать плагин брокера, чтобы напрямую подключаться к потоку сообщений.
Иногда необходимо подписаться на все сообщения, которые передаются через брокера, например, при сохранении их всех в базе данных. Это не должно быть сделано с помощью клиента MQTT и подписки на многоуровневый подстановочный знак. Причина в том, что часто подписывающийся клиент не в состоянии обрабатывать загружаемые сообщения. Особенно если у вас огромная пропускная способность. Рекомендуемое решение - реализовать расширение в брокере MQTT, например, система плагинов HiveMQ позволяет вам подключиться к поведению HiveMQ и добавить асинхронную подпрограмму для обработки каждого входящего сообщения и сохранения его в базе данных.
Есть ли
- аналогичная система (расширение / плагин) для брокера комаров,
- другой рекомендуемый метод, который работает с комарами, или
- разумное доказательство того, что такой подход вообще не нужен, т. е. что клиент, подписавшийся на подписку,
#
может справиться?
/programming//q/31584613/3984613 не исчерпывает этот вопрос.
Это обсуждение списка рассылки openHAB, кажется, предполагает, что нет проблем с использованием
#
в качестве подписки для получения всех сообщений:Этот вопрос переполнения стека также предлагает тот же метод:
Как указал Бенс Кауликс , в спецификации указано , что
#
это действительно:Честно говоря, я спорю, действительно ли первоначальное утверждение вообще имеет большой смысл:
Если это так, как брокер может обрабатывать сообщения в первую очередь? Поскольку ваш клиент имеет характеристики производительности, сходные с брокером, я сильно сомневаюсь, что было бы возможно перегружать клиента, потому что этот уровень трафика также перегружал бы брокера и вызывал бы его сбой первым.
Таким образом, утверждение HiveMQ, похоже, не подтверждается большим количеством свидетельств из других источников, и, если учесть, что это на самом деле означает, оно не кажется особенно логичным.
источник
Я думаю, что важно учитывать, что существует много разных вариантов использования для брокеров MQTT, как и для любого программного обеспечения.
Обработка сообщений чата для миллиарда пользователей (многие пользователи, относительно низкая скорость передачи сообщений на пользователя) отличается от системы с небольшим количеством клиентов, но с высокой скоростью передачи сообщений, и они оба отличаются от системы домашней автоматизации (мало клиентов, низкая скорость передачи сообщений) ,
HiveMQ думает о приложениях с очень высокой скоростью клиент / сообщение - в этом случае возможности брокера почти наверняка намного превосходят возможности клиента.
Если вы хотите подписаться на
#
систему домашней автоматизации, то это вряд ли вызовет проблемы. Вы можете проверить и посмотреть, использует ли брокер чрезмерную загрузку процессора в любом случае.Как и в других ответах, подписка на
#
даст вам все «нормальные» темы, то есть все, что не начинается с$
. Я понимаю, что в спецификации говорится, что каждая тема, начинающаяся с,$
представляет собой целое отдельное дерево, так что вам нужно подписаться$SYS/#
,$whatever/#
чтобы получить все . Вы, скорее всего, не хотите делать это в любом случае для обычного приложения.источник