Joh*_*hnL 8 java mqtt mosquitto paho
我已经看到了mosquitto_pub -h [server] -r -n -t [XYZ]语法,用于清除一条消息.我的问题是设备开发人员发布了大量垃圾邮件.我有一个java/paho代码库,我想根据需要自动修改它,但我似乎无法发布零字节消息.我试过了
client.publish(topic,null);
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.
关于如何删除所有内容的任何建议.
Gus*_*soh 14
以下是如何使用shell脚本正确执行此操作.
#!/bin/sh
echo "cleaning " $1 " :: usage: cleanmqtt <host>"
mosquitto_sub -h $1 -t "#" -v | while read line; do mosquitto_pub -h $1 -t "${line% *}" -r -n; done
Run Code Online (Sandbox Code Playgroud)
把它放在一个名为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
Run Code Online (Sandbox Code Playgroud)
收到所有消息后,你必须在一段时间后按ctrl + c.这个解决方案很粗糙.你不能指定删除什么或任何东西.
Mosquitto 客户端提供 --remove-retained 选项:
mosquitto_sub -h $host --remove-retained -t '#' -W 1
Run Code Online (Sandbox Code Playgroud)
tunning -t 可以处理要清除的特定主题。
根据publish您使用的两种方法中的哪一种,使用 paho 客户端代码有两种选择。
MqttMessage msg = new MqttMessage(new byte[0]);
msg.setRetained(true);
client.publish(topic, msg);
Run Code Online (Sandbox Code Playgroud)
或者
client.publish(topic, new byte[0],0,true);
Run Code Online (Sandbox Code Playgroud)
另一种选择是停止 mosquitto 并删除持久性文件并重新启动