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

Я новичок в mqtt и хотел бы кое-что обдумать.

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

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

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

Брокер? Нужно ли запускать москит на моей машине, или я могу сойти с рук только с помощью сценария и mqtt?

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

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

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

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам