【问题标题】:Do I need to run Mosquitto to interact with a remote mosquitto broker我是否需要运行 Mosquitto 才能与远程 mosquitto 代理交互
【发布时间】:2016-03-03 10:48:19
【问题描述】:

我是 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

是经纪人吗?我需要在我的机器上运行 mosquitto 还是只需要一个脚本和mqtt 就可以了?

该文档描述了架构并包括以下几行:

第 3 方平台需要安装一个允许 与我们服务器上的不同盒子进行通信。我们服务器上的代理将 启动连接并提供凭据以允许 双向通信。

我想到的架构是一个预定的后台进程,使用ruby-mqtt,它将产生,与远程mosquitto 服务器连接,并在完成之前批量拉下新消息。这听起来像是从远程 mosquitto 代理获取消息的合理方法吗?

我有一个偷偷摸摸的怀疑有什么我没有得到...任何帮助/方向将不胜感激。谢谢!

【问题讨论】:

    标签: ruby mqtt mosquitto ruby-mqtt


    【解决方案1】:

    不,您不需要本地 MQTT 服务器,您可以从 ruby​​ 脚本直接连接到远程服务器。

    通常让 MQTT 客户端始终运行,而不仅仅是使用 cron 定期下载。虽然我认为这可以工作,但前提是您使用 QoS 1/2 并禁用干净会话,以便将消息保留在远程服务器上。尽管它的名字,MQTT 不是一个消息队列协议,它是一个发布/订阅协议,所以有可能在远程服务器上不允许你建立一个大的消息池。

    然而,可能需要有一个本地 MQTT 服务器(例如 mosquitto): * 您的本地 MQTT 服务器可以处理将消息存储到磁盘,直到 ruby​​ 为它们准备好 * 它允许多个本地客户端接收相同的消息,而远程服务器不必通过网络多次发送它 * 多个本地客户端可以互相发送消息,即使远程网络中断

    另外请注意,ruby-mqtt 还不能正确支持 QoS 1,也不支持消息的持久化或自动重新连接,因此本地 mosquitto 实例可以为您解决其中的一些问题。

    【讨论】:

    • 非常感谢!现在这很有意义。我今天早上看了这个截屏视频 (youtube.com/watch?v=1GbYkCrbChw),这让我相信我们想要的是设置与远程代理的桥接。您的解释有助于解释原因。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 2015-09-28
    • 2019-12-10
    相关资源
    最近更新 更多