0

我是 mqtt 的新手,想了解一些事情。

我需要从远程mosquitto代理获取(订阅)主题的消息。该服务的文档说我需要mosquitto在我的服务器上运行一个代理。

如果我理解正确,那么一个使用mqttgem 并设法使用类似这样的东西进行连接的脚本:

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 方平台需要安装 MQTT 代理,以允许与我们服务器上的不同盒子进行通信。我们服务器上的代理将启动连接并提供凭据以允许双向通信。

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

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

4

1 回答 1

2

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

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

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

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

于 2016-03-03T16:24:11.120 回答