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

2022-09-04 06:29:12

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

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

client.publish(topic,null);

...但这似乎不起作用。

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


答案 1

下面介绍如何使用 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

只需将其放入一个名为“类似于”的文件中

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 中止。


答案 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并删除持久性文件并重新启动


推荐