我目前有两个MQTT经纪人都工作得非常好。其中一个是本地网络上的 Raspberry Pi 。另一个是CloudMQTT上托管的远程代理。
目标是将两个经纪人彼此同步。当然,对此的简单解决方案是一座桥梁,但我在进行正确的桥接设置时遇到了一些麻烦。
如下图所示,当我尝试在CloudMQTT上设置网桥时,它会要求'连接uri' 。对于远程代理,这将是mqtt://username:password@m20.cloudmqtt.com:1883
,但我似乎无法弄清楚如何为本地代理执行此操作。
据我所知,只有当您拥有静态IP并且端口转发到Raspberry Pi时,您才能连接到本地网络,那么我怎样才能解决这个问题呢?这两个代理需要保持永久TCP 连接打开,但远程代理无法自行打开它。本地经纪人无法打开此连接吗?如果是这样,我将如何让两个经纪人同步?
感谢任何帮助,非常感谢您的帮助!
修改
这是我的完整/etc/mosquitto/mosquitto.conf文件:
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
connection CloudMQTT-Bridge
topic # both 2 local/testing remote/testing
bridge_protocol_version mqttv311
address m20:cloudmqtt.com:17001
remote_username jcw******
remote_password p-fO*****
remote_clientid RaspberryPiBroker
答案 0 :(得分:1)
您可以使用mosquitto创建桥梁,man页面的“配置桥梁”部分涵盖了所有选项,但您需要的基础是:
connection cloudMQ-Bridge
address m20.cloudmqtt.com
remote_username user
remote_password password
remote_clientid clientid
topic # in 2
棘手的一点是最后的主题行,它控制着如何在两个代理之间映射主题。你必须小心不要创建循环。
在该示例中,所有主题都从远程代理映射到QOS 2上的本地代理,而没有任何主题重新映射。请仔细阅读有关主题映射的手册部分,因为它很容易出错。