web-dev-qa-db-ja.com

mosquittoから保持されているすべてのmqttメッセージをクリアする方法

私はmosquitto_pub -h [server] -r -n -t [XYZ]構文を見て、1回限りのメッセージを消去しました。私の問題は、デバイス開発者が大量のゴミメッセージを投稿していることです。私は必要に応じてこれを自動的に行うために修正したいJava/pahoコードベースを持っていますが、ゼロバイトのメッセージを公開することはできません。私は試した

client.publish(topic,null);

しかし、それはうまくいかないようでした。

まとめてすべてを削除する方法に関する提案。

8
JohnL

使用する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を停止し、永続性ファイルを削除して再起動することです

4
hardillb

シェルスクリプトを使用して適切に行う方法を次に示します。

#!/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を押す必要があります。このソリューションは非常に粗雑です。削除するものなどを指定することはできません。

14
Gussoh

これは動作するはずです:

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

また、特定のトピック階層をクリアするために、Eclipse Paho Pythonの このスクリプト に興味があるかもしれません。 Javaで同様の動作を実装することもできますが、1回限りのソリューションを探しているように見える可能性があるため、単にPythonスクリプト:)を使用してください。

1
kartben

コメントするのに十分なポイントがないので、走ります

#!/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-onlymosquitto_subに追加すると、無限ループが削除されるようです。

0
user3084651

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

enter image description here

0
Manav Akela