【问题标题】:How to store messages in /mosquitto/data MQTT mosquitto?如何在 /mosquitto/data MQTT mosquitto 中存储消息?
【发布时间】:2020-02-14 04:48:54
【问题描述】:

我在AWS ECS 中运行Docker 并在ECS 实例的docker 容器内运行eclipse-mosquitto

我需要将消息存储在/mosquitto/data

我尝试了什么

docker exec -it [container name] sh 导航到/mosquitto/config/mosquitto.conf

修改了mosquitto.conf 文件并添加了这些行:

persistence true
persistence_location /mosquitto/data/
listener 1883
listener 9001
protocol websockets

注意

我已经在/mosquitto 上挂载了EFS,所以我希望配置文件能够持续存在,并且我希望它在下次容器重新启动时使用该配置文件

我的期望

每当我publishing/subscribing 到某个主题时,它应该将相关数据存储在mosquitto/data

【问题讨论】:

    标签: docker mqtt mosquitto


    【解决方案1】:

    第一

    登录到正在运行的容器并编辑配置文件不会改变正在运行的代理行为。

    您通常需要重新启动容器(这将恢复对配置文件的更改)

    您可以在启动时使用以下命令行选项将自己的配置文件挂载到容器中(在 docker hub page 上进行了描述)

    $ docker run -it -p 1883:1883 -p 9001:9001 -v mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto
    

    其次

    mosquitto 不会将所有消息存储在持久性文件中,这不是它的用途。该文件仅用于存储 QOS 1 或 2 正在运行的消息和保留的消息。这些消息通常保存在内存中,但会定期或在代理关闭时写入文件,以便在代理重新启动时恢复它们。另外持久化文件的格式是自定义的二进制格式,不是很容易读懂的。

    【讨论】:

    • 对不起,我忘了提到我在/mosquitto上安装了EFS所以我希望它保留配置文件
    • 我更新了我的问题,请你告诉我可能出了什么问题?我是 mosquitto 的新手,我昨天自己开始了......我还需要更改我的默认 qos 值来存储一些东西吗?
    • 我回答的第二部分涵盖了所有这些。代理将仅存储保留的消息或以 QOS1 或 2 传递的消息,仅用于传递它们所需的时间,它不是一种记录消息以供以后使用的方法。
    • 当然非常感谢.. 另外我想知道是否有任何特殊的方法可以测试 mosquitto 是否确实使用了我的自定义 conf 文件而不是默认的 :)