如何在mosquitto代理中保存离线消息

时间:2017-11-02 07:21:34

标签: mqtt mosquitto

我有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地址是我的覆盆子pi的ip地址。在树莓派上,我制作了一个小型python脚本,用于发布传感器1的数据。在我的ubuntu机器上,我可以使用以下命令接收数据:

mosquitto_sub -t sensor/sensor1 -h 192.168.1.154

在上面的命令中,我给出了主题和主机IP地址。所以这种方式我能够从pi接收所有消息。但我想测试pi是否脱机(没有wifi / lan)然后消息是本地存储在pi上,当它重新联机时,我是否可以收到所有消息。

我使用上述配置对此进行了测试,但无法接收离线消息。我按照here {{3}}将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

2 个答案:

答案 0 :(得分:1)

cleansession设置为true,您将不会获得任何排队的消息,因为它指示代理放弃任何排队的消息。

如果您希望ubuntu计算机上的代理为pi的消息排队,则需要将cleansession设置为false,并确保您正在为pi代理和mosquitto_sub客户端使用固定的clientid,然后到把它们转发给客户。

答案 1 :(得分:0)

我已经在hardilb的帮助下解决了这个问题。这就是我做的离线消息:

  1. 将cleansession设为false
  2. 修正了客户端ID
  3. 使用了QOS 1.
  4. 感谢。