Нужно ли запускать Mosquitto для взаимодействия с удаленным брокером mosquitto?

Я новичок в mqtt и хотел бы кое-что понять.

Мне нужно получать сообщения из тем (подписываться на них) от удаленного mosquitto брокера. В документации к сервису сказано, что мне нужно запустить брокера mosquitto на моем сервере.

Если я правильно понимаю, то скрипт, который использует гем mqtt и умеет подключаться, используя что-то вроде этого:

MQTT::Client.connect(conn_opts) do |c|
  # The block will be called when you messages arrive to the topic
  c.get('test') do |topic, message|
    puts "#{topic}: #{message}"
  end
end

ЯВЛЯЕТСЯ брокером? Нужно ли запускать mosquitto на моей машине или можно обойтись только скриптом и mqtt?

Документ описывает архитектуру и включает следующие строки:

На сторонней платформе должен быть установлен брокер MQTT, который позволит обмениваться данными с различными ящиками на наших серверах. Брокер на наших серверах инициирует соединение и предоставит учетные данные для двунаправленной связи.

Архитектура, которую я имею в виду, представляет собой запланированный фоновый процесс с использованием ruby-mqtt, который будет запускаться, подключаться к удаленному серверу mosquitto и получать новые сообщения партиями перед завершением. Звучит ли это как разумный подход для получения сообщений от удаленного mosquitto брокера?

У меня есть подозрение, что я чего-то не понимаю... буду признателен за любую помощь/направление. Спасибо!


person Apie    schedule 03.03.2016    source источник


Ответы (1)


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

Обычно клиент MQTT работает постоянно, а не просто периодически загружается с помощью cron. Хотя я предполагаю, что это может сработать, если вы используете QoS 1/2 и отключите чистые сеансы, чтобы сообщения сохранялись на удаленном сервере. Несмотря на свое название, MQTT не является протоколом очередей сообщений, это протокол публикации/подписки, поэтому возможно, что на удаленном сервере вы не сможете создать большой пул сообщений.

Однако может быть желательным иметь локальный сервер MQTT (например, mosquitto): * Ваш локальный сервер MQTT может хранить сообщения на диске до тех пор, пока ruby ​​не будет готов для них * Это позволяет нескольким локальным клиентам получать одно и то же сообщение без удаленного сервер должен отправлять его по сети несколько раз * Несколько локальных клиентов могут отправлять сообщения друг другу, даже когда удаленная сеть не работает

Также имейте в виду, что ruby-mqtt еще не поддерживает должным образом QoS 1, а также не поддерживает сохранение сообщений или автоматические переподключения, поэтому локальный экземпляр mosquitto может решить некоторые из этих проблем за вас.

person njh    schedule 03.03.2016
comment
Большое спасибо! Теперь это имеет большой смысл. Сегодня утром я посмотрел этот скринкаст ( youtube.com/watch?v=1GbYkCrbChw), который заставляет меня поверить, что мы хотим установить мостовое соединение с удаленным брокером. Ваше объяснение помогает объяснить, почему. Благодарю вас! - person Apie; 04.03.2016