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.
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
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.
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 :)