我是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
代理获取消息的合理方法吗?
我有一种偷偷摸摸的怀疑,有一些我没有得到的......任何帮助/方向将不胜感激。谢谢!
答案 0 :(得分:2)
不,你不需要本地MQTT服务器,你可以从ruby脚本直接连接到远程服务器。
通常保持MQTT客户端始终运行,而不是仅使用cron定期下载。虽然我认为这可行,但假设您正在使用QoS 1/2并禁用干净会话,以便消息保留在远程服务器上。尽管它的名称,MQTT不是消息队列协议,它是一个发布/订阅协议,因此在远程服务器上可能不允许您构建大量消息池。
然而,可能需要一个本地MQTT服务器(例如mosquitto): *您的本地MQTT服务器可以处理将消息存储到磁盘,直到ruby为它们做好准备 *它允许多个本地客户端接收相同的消息,而远程服务器不必多次通过网络发送它 *多个本地客户端可以相互发送消息,即使远程网络已关闭
另请注意,ruby-mqtt尚未正确支持QoS 1,也不支持持久保留消息或自动重新连接,因此本地mosquitto实例可以为您解决其中的一些问题。