J'ai installé rabbitmqadmin
et j'ai pu répertorier tous les échanges et les files d'attente. Comment utiliser rabbitmqadmin
ou rabbitmqctl
pour supprimer toutes les files d'attente?.
Commencez par lister vos files d'attente:
rabbitmqadmin list queues name
Ensuite, dans la liste, vous devrez les supprimer manuellement un par un:
rabbitmqadmin delete queue name='queuename'
En raison du format de sortie, n'apparaît pas, vous pouvez grep la réponse de list queues
. Sinon, si vous cherchez simplement un moyen d'effacer tout (lire: réinitialiser tous les paramètres , rétablir l'état par défaut de l'installation), utilisez:
rabbitmqctl stop_app
rabbitmqctl reset # Be sure you really want to do this!
rabbitmqctl start_app
Avec rabbitmqadmin
, vous pouvez les supprimer avec ce one-liner:
rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
Essaye ça:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
En fait super facile avec le plugin de gestion et les politiques:
Goto Console de gestion (localhost: 15672)
Aller à Admin tab
Aller à Politiques onglet (à droite)
Ajouter Politique
Remplir les champs
Sauvegarder
J'ai créé un deleteRabbitMqQs.sh, qui accepte les arguments pour rechercher dans la liste des files d'attente, en sélectionnant uniquement celles qui correspondent au modèle souhaité. Si vous n'offrez aucun argument, tous les supprimeront! Il vous montre la liste des files d'attente qu'il est sur le point de supprimer, vous permettant de quitter avant toute action destructrice.
for Word in "$@"
do
args=true
newQueues=$(rabbitmqctl list_queues name | grep "$Word")
queues="$queues
$newQueues"
done
if [ $# -eq 0 ]; then
queues=$(rabbitmqctl list_queues name | grep -v "\.\.\.")
fi
queues=$(echo "$queues" | sed '/^[[:space:]]*$/d')
if [ "x$queues" == "x" ]; then
echo "No queues to delete, giving up."
exit 0
fi
read -p "Deleting the following queues:
${queues}
[CTRL+C quit | ENTER proceed]
"
while read -r line; do
rabbitmqadmin delete queue name="$line"
done <<< "$queues"
Si vous souhaitez une correspondance différente avec les arguments que vous transmettez, vous pouvez modifier le grep à la ligne quatre. La suppression de toutes les files d'attente ne supprime pas celles contenant trois espaces consécutifs, car j’ai pensé que cette éventualité serait plus rare que les personnes qui ont rabbitmqctl en imprimant le résultat dans différentes langues.
Prendre plaisir!
Si vous essayez de supprimer des files d'attente parce qu'elles ne sont pas utilisées et que vous ne voulez pas réinitialiser, une option consiste à définir la file d'attente TTL sur une valeur très basse via une stratégie, attendez que les files d'attente soient automatiquement supprimées. le TTL est passé, puis supprimez la stratégie ( https://www.rabbitmq.com/ttl.html ).
rabbitmqctl.bat set_policy delq ".*" '{"expires": 1}' --apply-to queues
Pour supprimer la politique
rabbitmqctl clear_policy delq
Notez que cela ne fonctionne que pour les files d'attente non utilisées
Informations d'origine ici: http://rabbitmq.1065348.n5.nabble.com/Deleting-all-queues-in-rabbitmq-td30933.html
Si vous n'avez pas installé rabbitmqadmin, essayez de purger les files d'attente avec rabbitmqctl:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
Voici un moyen de le faire avec PowerShell. l'URL peut avoir besoin d'être mis à jour
$cred = Get-Credential
iwr -ContentType 'application/json' -Method Get -Credential $cred 'http://localhost:15672/api/queues' | % {
ConvertFrom-Json $_.Content } | % { $_ } | ? { $_.messages -gt 0} | % {
iwr -method DELETE -Credential $cred -uri $("http://localhost:15672/api/queues/{0}/{1}" -f [System.Web.HttpUtility]::UrlEncode($_.vhost), $_.name)
}
Vous pouvez utiliser rabbitmqctl eval comme ci-dessous:
rabbitmqctl eval 'IfUnused = false, IfEmpty = true, MatchRegex =
<<"^prefix-">>, [rabbit_amqqueue:delete(Q, IfUnused, IfEmpty) || Q <-
rabbit_amqqueue:list(), re:run(element(4, element(2, Q)), MatchRegex)
=/= nomatch ].'
Ce qui précède supprimera toutes les files d'attente vides de tous les hôtes virtuels portant un nom Commençant par "prefix-" Vous pouvez éditer les variables IfUnused, IfEmpty, .__ et MatchRegex selon vos besoins.
Suppression de toutes les files d'attente avec Rabbitmqctl one liner
rabbitmqctl list_queues | awk '{ print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
Si vous souhaitez uniquement purger les files d'attente qui ne sont pas vides (beaucoup plus rapidement):
rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
Pour moi, cela prend 2 à 3 secondes pour purger une file d'attente (vides et non vides). Il est donc très pénible de parcourir 50 files d'attente, alors qu'il me faut en purger 10 (40/50 sont vides).
Pour lister les files d'attente,
./rabbitmqadmin -f tsv -q list queues
Pour supprimer une file d'attente,
./rabbitmqadmin delete queue name=name_of_queue
Cette commande supprime toutes vos files d'attente
python rabbitmqadmin.py \
-H YOURHOST -u guest -p guest -f bash list queues | \
xargs -n1 | \
xargs -I{} \
python rabbitmqadmin.py -H YOURHOST -u guest -p guest delete queue name={}
Ce script est très simple car il utilise -f bash
, qui affiche les files d'attente sous forme de liste.
Ensuite, nous utilisons xargs -n1
pour scinder cela en plusieurs variables
Nous utilisons ensuite xargs -I{}
pour exécuter la commande suivante et remplacer {}
dans la commande.
Voici une version plus rapide (avec parallel
install Sudo apt-get install parallel) développant l'excellente réponse de @admenva
parallel -j 50 rabbitmqadmin -H YOUR_Host_OR_LOCALHOST -q delete queue name={} ::: $(rabbitmqadmin -H YOUR_Host_OR_LOCALHOST -f tsv -q list queues name)
Vous n'avez pas besoin de réinitialiser le serveur rabbitmq pour supprimer les files d'attente non-durables. Arrêtez simplement le serveur, redémarrez-le et toutes les files d'attente non-durables disponibles seront supprimées.
Dans la version 3.7.10 de Rabbit, vous pouvez exécuter la commande ci-dessous avec le droit root:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
J'ai essayé les morceaux de code ci-dessus mais je n'ai pas fait de streaming.
Sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do Sudo rabbitmqctl delete_queue "$line"; done
.
Je génère un fichier qui contient tous les noms de file d’attente et passe en boucle ligne par ligne pour les supprimer. Pour les boucles, while read ...
ne l’a pas fait pour moi. Il s'arrêtait toujours au premier nom de la file d'attente.
Ok, qualificatif important pour cette réponse: La question demande d’utiliser soit rabbitmqctl OR rabbitmqadmin pour résoudre ce problème, ma réponse devait utiliser les deux. Notez également que cela a été testé sur MacOS 10.12.6 et sur les versions du rabbitmqctl et rabbitmqadmin installées lors de l’installation de rabbitmq avec Homebrew et identifiées par brew list --versions
par rabbitmq 3.7.0
rabbitmqctl list_queues -p <VIRTUAL_HOSTNAME> name | sed 1,2d | xargs -I qname rabbitmqadmin --vhost <VIRTUAL_HOSTNAME> delete queue name=qname
Il existe un moyen de supprimer toutes les files d'attente et tous les échanges sans script ni réinitialisation complète. Vous pouvez simplement supprimer et recréer un hôte virtuel à partir de l'interface d'administration. Cela fonctionnera même pour vhost /
.
Les seules choses à restaurer sont les autorisations pour le vhost nouvellement créé.
J'ai essayé rabbitmqctl et réinitialiser les commandes mais elles sont très lentes.
C'est le moyen le plus rapide que j'ai trouvé (remplacez votre nom d'utilisateur et votre mot de passe):
#!/bin/bash
# Stop on error
set -eo pipefail
USER='guest'
PASSWORD='guest'
curl -sSL -u $USER:$PASSWORD http://localhost:15672/api/queues/%2f/ | jq '.[].name' | sed 's/"//g' | xargs -L 1 -I@ curl -XDELETE -sSL -u $USER:$PASSWORD http://localhost:15672/api/queues/%2f/@
# To also delete exchanges uncomment next line
# curl -sSL -u $USER:$PASSWORD http://localhost:15672/api/exchanges/%2f/ | jq '.[].name' | sed 's/"//g' | xargs -L 1 -I@ curl -XDELETE -sSL -u $USER:$PASSWORD http://localhost:15672/api/exchanges/%2f/@
Remarque: cela ne fonctionne qu'avec le paramètre par défaut vhost /
Une autre option consiste à supprimer le vhost associé aux files d'attente. Ceci supprimera tout associé à vhost, alors soyez averti, mais c'est facile et rapide.
REMARQUE: l'équipe RabbitMQ surveille la liste de diffusion rabbitmq-users
et ne répond que parfois aux questions sur StackOverflow.