我已经安装了 mosquitto
broker,它被配置为在一个IP上发送所有消息。
以下是 bridge.conf
文件内容。
connection local-ubuntu
log_type all
address 192.168.0.5:1883
remote_username admin
remote_password admin
remote_clientid dev
try_private false
cleansession false
start_type automatic
bridge_insecure false
bridge_protocol_version mqttv311
bridge_tls_version tlsv1.2
notifications false
keepalive_interval 36000
autosave_interval 30
topic # out 2 test/topic/ test/topic/
topic # in 2 test/topic/ test/topic/
我把所有的数据都发给了broker,它成功地把所有的数据发布到了上述IP地址的机器上。
现在有的时候这台机器宕机了,由于这台机器没有收到MQTT broker发送的消息,丢失了。
我想在broker的桥中处理这种情况。我读到如果我们指定了将消息,那么它将保留所有没有发送的消息,一旦机器开机就会发送。但我无法找到合适的配置。
是否有任何方式谁已经工作在这种类型的情况下。请大家帮忙。谅谅
我认为你把一些不同的东西混为一谈了。
首先,最后的遗嘱消息是由客户端连接到broker时设置的,然后broker会挂在这个消息上,只有当客户端连接中断时才会发布这个消息(如果客户端干净利落地断开连接则不会)。它对这个客户端是否有消息排队没有影响。没有办法为经纪人的桥接配置一个LWT。
其次,没有必要为2个 topic
行来配置哪些主题会被桥接,你可以用这一行来替换这两行。
topic # both 2 test/topic/ test/topic/
现在因为你已经把话题桥接的QOS设置为 2
它应该已经在排队等候消息,如果远程经纪商停机,一旦网桥恢复,它将转发这些消息。
如果你想查看网桥的当前状态,你可以订阅到 $SYS/broker/connection/<remote_clientid>/state
题,并设置了 notifications true
选择权
另外,你的网桥的keepalive值(10小时)太高了,不能做任何有用的事情。在局域网中,我会使用10-30秒之间的东西。