我是否需要运行Mosquitto与远程蚊子经纪人进行交互

时间:2016-03-03 10:48:19

标签: ruby mqtt mosquitto ruby-mqtt

我是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来逃避?

该文档描述了该体系结构并包含以下几行:

  

第三方平台需要安装允许的MQTT代理   与我们服务器上的不同盒子进行通信。我们服务器上的经纪人会   启动连接并提供允许的凭据   双向沟通。

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

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

1 个答案:

答案 0 :(得分:2)

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

通常保持MQTT客户端始终运行,而不是仅使用cron定期下载。虽然我认为这可行,但假设您正在使用QoS 1/2并禁用干净会话,以便消息保留在远程服务器上。尽管它的名称,MQTT不是消息队列协议,它是一个发布/订阅协议,因此在远程服务器上可能不允许您构建大量消息池。

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

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