如何在 mosquitto broker 中保存离线消息
How to save offline messages in mosquitto broker
我有一个 raspberry pi
安装了 mosquitto。我正在使用 pub 和 sub 在 pi 和我的 ubuntu 机器之间发送和接收消息。我制作了一个文件 iot.conf
并将其放在 /etc/mosquitto/conf.d/iot.conf
中。以下是文件内容:
connection CONIOT
log_type all
address 192.168.1.154:8883
remote_clientid sensor1
bridge_cafile /etc/ssl/certs/ca-certificates.crt
try_private false
cleansession true
start_type automatic
bridge_insecure false
bridge_protocol_version mqttv311
bridge_tls_version tlsv1
notifications false
topic # out 0 sensor/sensor1 sensor/sensor1
topic # in 0 sensor/sensor1 sensor/sensor1
ip地址是我raspberry pi的ip地址。在 raspberry pi 上,我制作了一个小的 python 脚本来发布传感器 1 数据。在我的 ubuntu 机器上,我可以使用以下命令接收数据:
mosquitto_sub -t sensor/sensor1 -h 192.168.1.154
在上面的命令中,我给出了主题和主机IP地址。这样我就可以收到来自 pi 的所有消息。但我想测试 pi 是否离线(没有 wifi/lan)然后消息是否存储在 pi 本地,当它恢复在线时,我能否收到所有消息。
我用上面的配置测试了这个但是无法接收离线消息。我已经按照 here.
的描述使 cleansession
为真
谁能指出我哪里做错了。当 pi 未连接到 wifi/lan 时,我希望 mosquitto 保存离线消息。我该如何测试?
这里是 /etc/mosquitto/mosquitto.conf 文件的内容:
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
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
如果 cleansession
设置为 true,您将不会收到任何排队的消息,因为它指示代理丢弃任何排队的消息。
您需要将 cleansession
设置为 false 并确保您为 pi 代理和 mosquitto_sub 客户端使用固定的 clientid 如果您希望代理在您的 ubuntu机器为 pi 排队消息,然后将这些消息转发给客户端。
我已经在 hardilb 的帮助下解决了这个问题。这是我获取离线消息所做的:
- 将 cleansession 设置为 false
- 固定客户 ID
- 使用 QOS 1。
谢谢。
我有一个 raspberry pi
安装了 mosquitto。我正在使用 pub 和 sub 在 pi 和我的 ubuntu 机器之间发送和接收消息。我制作了一个文件 iot.conf
并将其放在 /etc/mosquitto/conf.d/iot.conf
中。以下是文件内容:
connection CONIOT
log_type all
address 192.168.1.154:8883
remote_clientid sensor1
bridge_cafile /etc/ssl/certs/ca-certificates.crt
try_private false
cleansession true
start_type automatic
bridge_insecure false
bridge_protocol_version mqttv311
bridge_tls_version tlsv1
notifications false
topic # out 0 sensor/sensor1 sensor/sensor1
topic # in 0 sensor/sensor1 sensor/sensor1
ip地址是我raspberry pi的ip地址。在 raspberry pi 上,我制作了一个小的 python 脚本来发布传感器 1 数据。在我的 ubuntu 机器上,我可以使用以下命令接收数据:
mosquitto_sub -t sensor/sensor1 -h 192.168.1.154
在上面的命令中,我给出了主题和主机IP地址。这样我就可以收到来自 pi 的所有消息。但我想测试 pi 是否离线(没有 wifi/lan)然后消息是否存储在 pi 本地,当它恢复在线时,我能否收到所有消息。
我用上面的配置测试了这个但是无法接收离线消息。我已经按照 here.
的描述使cleansession
为真
谁能指出我哪里做错了。当 pi 未连接到 wifi/lan 时,我希望 mosquitto 保存离线消息。我该如何测试?
这里是 /etc/mosquitto/mosquitto.conf 文件的内容:
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
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
如果 cleansession
设置为 true,您将不会收到任何排队的消息,因为它指示代理丢弃任何排队的消息。
您需要将 cleansession
设置为 false 并确保您为 pi 代理和 mosquitto_sub 客户端使用固定的 clientid 如果您希望代理在您的 ubuntu机器为 pi 排队消息,然后将这些消息转发给客户端。
我已经在 hardilb 的帮助下解决了这个问题。这是我获取离线消息所做的:
- 将 cleansession 设置为 false
- 固定客户 ID
- 使用 QOS 1。
谢谢。