清除了一次性的消息。我的問題是設備開發人員發佈了大量垃圾消息。我有一個java/paho代碼庫,我想修改它以根據需要自動執行此操作,但似乎無法發佈零字節消息。我試過如何清除所有保留的MQTT消息從我所看到的mosquitto_pub -h [服務器] -r -t -n [XYZ]語法mosquitto
client.publish(topic,null);
但這似乎並不奏效。
如何刪除一切,連接質量的任何建議。
清除了一次性的消息。我的問題是設備開發人員發佈了大量垃圾消息。我有一個java/paho代碼庫,我想修改它以根據需要自動執行此操作,但似乎無法發佈零字節消息。我試過如何清除所有保留的MQTT消息從我所看到的mosquitto_pub -h [服務器] -r -t -n [XYZ]語法mosquitto
client.publish(topic,null);
但這似乎並不奏效。
如何刪除一切,連接質量的任何建議。
有使用根據泛美衛生組織的客戶端代碼上的2種publish
方法使用該2個選項。
MqttMessage msg = new MqttMessage(new byte[0]);
msg.setRetained(true);
client.publish(topic, msg);
或
client.publish(topic, new byte[0],0,true);
另一種選擇是停止mosquitto並刪除持久性文件,並重新啓動
這應該工作:
client.publish(topic, new byte[]{}, 0, true);
此外,你可能會對來自Eclipse Paho Python的this script感興趣,以清除給定的主題層次結構。您可能希望在Java中實現類似的行爲,但它看起來像你可能會尋找一個一次性的解決方案,所以也許只需使用Python腳本:)
這裏是如何用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
只是把它放在一個叫做財產以後文件中像
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一會兒它收到了所有的消息。這個解決方案很粗糙。你不能指定要刪除什麼或任何東西。
其實,第一個版本將無法正常工作,因爲需要與保留標誌設置要發佈的消息。 – kartben
添加代碼來設置保留 – hardillb
刪除持久性文件原來是我真正需要的選項。 – JohnL