如何在 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 的帮助下解决了这个问题。这是我获取离线消息所做的:

  1. 将 cleansession 设置为 false
  2. 固定客户 ID
  3. 使用 QOS 1。

谢谢。