如何从 Mosquitto 清除所有保留的 mqtt 消息?

新手上路,请多包涵

我见过用于清除一次性消息的 mosquitto_pub -h [server] -r -n -t [XYZ] 语法。我的问题是设备开发人员发布了很多垃圾消息。

我有一个 Java/Paho 代码库,我想修改它以根据需要自动执行此操作,但我似乎无法发布零字节消息。我试过了

client.publish(topic,null);

……但这似乎没有用。

关于如何批量删除所有内容的任何建议?

原文由 JohnL 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2k
2 个回答

使用 paho 客户端代码有 2 个选项,具体取决于您使用的 2 publish 方法中的哪一个。

 MqttMessage msg = new MqttMessage(new byte[0]);
msg.setRetained(true);
client.publish(topic, msg);

或者

client.publish(topic, new byte[0],0,true);

另一种选择是停止 mosquitto 并删除持久性文件并重新启动

原文由 hardillb 发布,翻译遵循 CC BY-SA 3.0 许可协议

以下是如何使用 shell 脚本正确执行此操作。

 #!/bin/sh
echo "cleaning " $1 " :: usage: cleanmqtt <host>"
mosquitto_sub -h $1 -t "#" -v --retained-only | while read line; do mosquitto_pub -h $1 -t "${line% *}" -r -n; done

只需将它放在一个名为 somthing 之类的文件中

finally_a_working_way_to_remove_all_those_annoying_messages.sh

然后运行

sh finally_a_working_way_to_remove_all_those_annoying_messages.sh localhost

这个解决方案很粗糙。您无法指定要删除的内容或任何内容。在您可以假设它已收到所有消息后,您可能必须使用 ctrl-c 中止。

原文由 Gussoh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题