web-dev-qa-db-fra.com

comment effacer TOUS les messages mqtt retenus de mosquitto

J'ai déjà vu la syntaxe mosquitto_pub -h [serveur] -r -n -t [XYZ] pour effacer des messages uniques. Mon problème est que les développeurs d'appareils ont posté beaucoup de messages incohérents. J'ai une base de code Java/Paho que je souhaiterais modifier pour le faire automatiquement, mais je ne parviens pas à publier un message de zéro octet. j'ai essayé

client.publish(topic,null);

mais cela n'a pas semblé fonctionner. 

Toutes les suggestions sur la façon de tout supprimer, en masse.

7
JohnL

Il existe 2 options pour cela en utilisant le code client paho en fonction de la méthode publish que vous utilisez.

MqttMessage msg = new MqttMessage(new byte[0]);
msg.setRetained(true);
client.publish(topic, msg);

ou

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

L’autre option serait d’arrêter mosquitto, de supprimer le fichier de persistance et de redémarrer

4
hardillb

Voici comment le faire correctement avec un script 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

Il suffit de le mettre dans un fichier appelé somthing comme 

finally_a_working_way_to_remove_all_those_annoying_messages.sh

Puis courir

sh finally_a_working_way_to_remove_all_those_annoying_messages.sh localhost

Vous devrez ctrl + c après un moment après avoir reçu tous les messages. Cette solution est assez grossière. Vous ne pouvez pas spécifier quoi supprimer ou quoi que ce soit.

11
Gussoh

Cela devrait fonctionner:

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

Vous pouvez également être intéressé par ce script d’Eclipse Paho Python, pour effacer une hiérarchie de sujets donnée. Vous voudrez peut-être implémenter un comportement similaire en Java, mais il semblerait que vous recherchiez peut-être une solution ponctuelle. Vous pouvez donc utiliser simplement le script Python :) 

1
kartben