2016-04-19 28 views

回答

3

有使用根據泛美衛生組織的客戶端代碼上的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並刪除持久性文件,並重新啓動

+0

其實,第一個版本將無法正常工作,因爲需要與保留標誌設置要發佈的消息。 – kartben

+0

添加代碼來設置保留 – hardillb

+1

刪除持久性文件原來是我真正需要的選項。 – JohnL

0

這應該工作:

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

此外,你可能會對來自Eclipse Paho Python的this script感興趣,以清除給定的主題層次結構。您可能希望在Java中實現類似的行爲,但它看起來像你可能會尋找一個一次性的解決方案,所以也許只需使用Python腳本:)

+0

python腳本似乎不適用於非ascii主題或有效內容。我剛剛發佈的shell腳本似乎更好。 – Gussoh

+0

「此腳本」鏈接現在是404 – Trevor

5

這裏是如何用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一會兒它收到了所有的消息。這個解決方案很粗糙。你不能指定要刪除什麼或任何東西。

+0

您能否演示如何修改腳本以包含用戶名和密碼?當我運行它時,我得到「連接被拒絕:未經授權」。謝謝。 – moster67

+0

當然,將-u _username_ -P _password_添加到mosquitto_sub和mosquitto_pub行中 – Gussoh

0

我停在服務器代理,並重新啓動它。所有保留的信息都消失了。 :)如果你能做到這一點,我敢打賭,這是最簡單的方法。

+2

只有在代理沒有配置持久性的情況下才有效,這不是默認配置 – hardillb

相關問題