私はmosquitto_pub -h [server] -r -n -t [XYZ]構文を見て、1回限りのメッセージを消去しました。私の問題は、デバイス開発者が大量のゴミメッセージを投稿していることです。私は必要に応じてこれを自動的に行うために修正したいJava/pahoコードベースを持っていますが、ゼロバイトのメッセージを公開することはできません。私は試した
client.publish(topic,null);
しかし、それはうまくいかないようでした。
まとめてすべてを削除する方法に関する提案。
使用する2つのpublish
メソッドのいずれかに応じて、pahoクライアントコードを使用する2つのオプションがあります。
MqttMessage msg = new MqttMessage(new byte[0]);
msg.setRetained(true);
client.publish(topic, msg);
または
client.publish(topic, new byte[0],0,true);
他のオプションは、mosquittoを停止し、永続性ファイルを削除して再起動することです
シェルスクリプトを使用して適切に行う方法を次に示します。
#!/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
それを次のような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を押す必要があります。このソリューションは非常に粗雑です。削除するものなどを指定することはできません。
これは動作するはずです:
client.publish(topic, new byte[]{}, 0, true);
また、特定のトピック階層をクリアするために、Eclipse Paho Pythonの このスクリプト に興味があるかもしれません。 Javaで同様の動作を実装することもできますが、1回限りのソリューションを探しているように見える可能性があるため、単にPythonスクリプト:)を使用してください。
コメントするのに十分なポイントがないので、走ります
#!/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
pub/subの遅延により無限ループを引き起こす可能性があります。 --retained-only
をmosquitto_sub
に追加すると、無限ループが削除されるようです。
Mosquitto MQTT Brokerを使用している場合は、Mosquittoが提供する公式の方法を使用して「Retained messages」を無効にします
最初にmosquitto.confファイルを見つけます
(私のUbuntu/EC2インスタンスでは、/ etc/mosquittoディレクトリに保存されます。mosquitto.confファイルのパスは/etc/mosquitto/mosquitto.confであると仮定しています)
お気に入りのテキストエディタで編集してください。私のものはnanoです。
Sudo nano /etc/mosquitto/mosquitto.conf
そのファイルで、「persistence true」の代わりに「persistence false」を置き換えます
persistence false
ファイルを保存します(nanoを使用する場合はctrl + oを押してからEnterで保存し、ctrl + xで終了します)
以下のコマンドを使用してmosquittoを再起動します
Sudo service mosquitto stop
Sudo service mosquitto start
注:この設定パスがあなたのケースに存在しない場合、このコマンドを使用して設定ファイルを見つけます-
Sudo find / -name mosquitto.conf