作为 MQTT 转发代理的 Mosquitto
Mosquitto with persitence as MQTT Forwarding Broker
我们想在许多 OpenWRT 网关上使用 Mosquitto MQTT 作为消息代理,以将“本地”匿名 MQTT 发布转发到经过授权的中央 RabbitMQ/MQTT 集群。
我们的问题:
重新启动时,Mosquitto 无法可靠地转发排队的消息(持久性不起作用)
运行蚊子版本:1.4.15
当前配置
这是最后测试的配置:
port 1883
persistence true
persistence_file /mosquitto.db
persistence_location /etc/mosquitto
autosave_interval 1
autosave_on_changes true
allow_anonymous true
connection iotcluster
address ip:1883
notifications false
keepalive_interval 300
restart_timeout 30
start_type automatic
clientid rabbitmqtt
username user
password password
topic mqtt out 2
try_private true
只要所有系统 运行 和在线 - 一切都按预期工作 - 通过以下方式在本地发布的任何消息:
mosquitto_pub -h localhost -p 1883 -t mqtt -m "Test-Bridge-Online"
将转发并发布到 RabbitMQTT。
连接丢失
当我们产生连接丢失(例如断开电缆)并重新建立该连接时,同时收到的消息不会自动从 Mosquitto 转发到 RabbitMQTT
但是 - 当另外发送新的发布消息时 - Mosquitto 还会发送排队的消息 ???
Mosquitto 重启
如果我们在连接丢失期间重新启动 Mosquitto,排队的消息将全部丢失 - 没有 PERSISTINACE 选项工作这么久。
请帮忙
我们尝试了 autosave_interval
、QoS 0/1/2
和 other option combination
的不同选项 - 但无论如何 - 在重新启动 Mosquitto 时 - 所有消息都丢失 - 无论如何都没有持久性
运行 更新到 mosquitto 版本 1.6.10 后仍然没有成功。
我可以找出主要问题 - 设置时数据库没有保存:
persistence true
persistence_file /mosquitto.db
persistence_location /etc/mosquitto
autosave_interval 1
autosave_on_changes true
不知道为什么,但无法通过上述设置调用数据库保存。
数据库在 SIG-EXIT 时保存,但在推送新消息时不保存。
所以我将设置更改为:
persistence true
persistence_file /mosquitto.db
persistence_location /etc/mosquitto
autosave_interval 300
autosave_on_changes false
并在推送消息后调用保存数据库的请求:
# publish a new message
mosquitto_pub -h localhost -p 1883 -t mqtt -m "Test Offline 100" -q 1
# send signal to save database
killall -SIGUSR1 mosquitto
使用此功能时 - 所有类型的消息都在连接状态下排队并送达。
这是最终配置:
user mosquitto
port 1883
allow_anonymous true
queue_qos0_messages true
persistence true
persistence_file mosquitto.db
persistence_location /etc/mosquitto/
autosave_interval 300
autosave_on_changes false
connection ConName
address remote-ip:1883
bridge_protocol_version mqttv31
clientid ClientName
username user
password password
cleansession false
try_private false
retain_available false
start_type automatic
restart_timeout 60
keepalive_interval 120
notifications true
notifications_local_only true
notification_topic mqtt
topic mqtt out 1
我们想在许多 OpenWRT 网关上使用 Mosquitto MQTT 作为消息代理,以将“本地”匿名 MQTT 发布转发到经过授权的中央 RabbitMQ/MQTT 集群。
我们的问题:
重新启动时,Mosquitto 无法可靠地转发排队的消息(持久性不起作用)
运行蚊子版本:1.4.15
当前配置
这是最后测试的配置:
port 1883
persistence true
persistence_file /mosquitto.db
persistence_location /etc/mosquitto
autosave_interval 1
autosave_on_changes true
allow_anonymous true
connection iotcluster
address ip:1883
notifications false
keepalive_interval 300
restart_timeout 30
start_type automatic
clientid rabbitmqtt
username user
password password
topic mqtt out 2
try_private true
只要所有系统 运行 和在线 - 一切都按预期工作 - 通过以下方式在本地发布的任何消息:
mosquitto_pub -h localhost -p 1883 -t mqtt -m "Test-Bridge-Online"
将转发并发布到 RabbitMQTT。
连接丢失
当我们产生连接丢失(例如断开电缆)并重新建立该连接时,同时收到的消息不会自动从 Mosquitto 转发到 RabbitMQTT
但是 - 当另外发送新的发布消息时 - Mosquitto 还会发送排队的消息 ???
Mosquitto 重启
如果我们在连接丢失期间重新启动 Mosquitto,排队的消息将全部丢失 - 没有 PERSISTINACE 选项工作这么久。
请帮忙
我们尝试了 autosave_interval
、QoS 0/1/2
和 other option combination
的不同选项 - 但无论如何 - 在重新启动 Mosquitto 时 - 所有消息都丢失 - 无论如何都没有持久性
运行 更新到 mosquitto 版本 1.6.10 后仍然没有成功。
我可以找出主要问题 - 设置时数据库没有保存:
persistence true
persistence_file /mosquitto.db
persistence_location /etc/mosquitto
autosave_interval 1
autosave_on_changes true
不知道为什么,但无法通过上述设置调用数据库保存。
数据库在 SIG-EXIT 时保存,但在推送新消息时不保存。
所以我将设置更改为:
persistence true
persistence_file /mosquitto.db
persistence_location /etc/mosquitto
autosave_interval 300
autosave_on_changes false
并在推送消息后调用保存数据库的请求:
# publish a new message
mosquitto_pub -h localhost -p 1883 -t mqtt -m "Test Offline 100" -q 1
# send signal to save database
killall -SIGUSR1 mosquitto
使用此功能时 - 所有类型的消息都在连接状态下排队并送达。
这是最终配置:
user mosquitto
port 1883
allow_anonymous true
queue_qos0_messages true
persistence true
persistence_file mosquitto.db
persistence_location /etc/mosquitto/
autosave_interval 300
autosave_on_changes false
connection ConName
address remote-ip:1883
bridge_protocol_version mqttv31
clientid ClientName
username user
password password
cleansession false
try_private false
retain_available false
start_type automatic
restart_timeout 60
keepalive_interval 120
notifications true
notifications_local_only true
notification_topic mqtt
topic mqtt out 1