Réponses:
Tout d'abord, listez 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 à partir de list queues
. Sinon, si vous cherchez simplement un moyen de tout effacer (lire: réinitialiser tous les paramètres , ramener l'installation à un état par défaut), utilisez:
rabbitmqctl stop_app
rabbitmqctl reset # Be sure you really want to do this!
rabbitmqctl start_app
rabbitmqctl list_queues | grep 0 | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn
grep $'\t0'
ou quelque chose.
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
egrep
, donc ma commande ressemblera à ceci:rabbitmqadmin -f tsv -q list queues name | egrep "%search word%" | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
En fait, très facile avec le plugin de gestion et les politiques:
Accéder à la console de gestion (localhost: 15672)
Aller à l' onglet Admin
Onglet Aller aux politiques (sur le côté droit)
Ajouter une politique
Remplir les champs
sauver
Essaye ça:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
*** Not found: /api/queues/%2F/name
parce que la sortie est une table ASCII avec une colonne "nom". J'ai modifié la commande pour y rabbitmqadmin list queues name | awk '!/--|name/ {print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
remédier.
rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
Si rabbitmqadmin n'est pas installé, essayez de purger les files d'attente avec rabbitmqctl:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
delete_queue
pas de purge_queue
commandes ni dans rabbitmqctl
. Je voudrais purger un grand nombre de files d'attente qui semblent être générées automatiquement et je ne voudrais pas installer un logiciel supplémentaire comme rabbitmqadmin
...
rabbitmqctl purge_queue
travaillé ici manuellement. Il me suffisait d'ajouter -p <hôte- virtuel>
delete_queue
et purge_queue
sont disponibles dans rabbitmqctl
et je viens de les exécuter avec succès. Peut-être que vous utilisez une ancienne version.
Si vous essayez de supprimer des files d'attente parce qu'elles sont inutilisées et que vous ne voulez pas réinitialiser, une option consiste à définir le TTL de la file d'attente très bas via une stratégie, attendez que les files d'attente soient supprimées automatiquement une fois le TTL 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 utilisé files d'attente
Informations originales ici: http://rabbitmq.1065348.n5.nabble.com/Deleting-all-queues-in-rabbitmq-td30933.html
J'ai fait un deleteRabbitMqQs.sh, qui accepte les arguments pour rechercher la liste des files d'attente, en ne sélectionnant que celles qui correspondent au modèle souhaité. Si vous ne proposez aucun argument, il les supprimera tous! Il vous montre la liste des files d'attente qu'il est sur le point de supprimer, vous permettant de quitter avant de faire quoi que ce soit de destructeur.
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 voulez une correspondance différente avec les arguments que vous passez, vous pouvez modifier le grep à la ligne quatre. Lors de la suppression de toutes les files d'attente, il ne supprimera pas celles avec trois espaces consécutifs, car j'ai pensé que cette éventualité serait plus rare que les personnes qui ont rabbitmqctl imprimant sa sortie dans différentes langues.
Prendre plaisir!
Dans la version 3.7.10 de Rabbit, vous pouvez exécuter la commande ci-dessous avec l'autorisation root:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
Voici un moyen de le faire avec PowerShell. l'URL doit peut-être être mise à 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 dans tous les vhosts dont le nom commence par "prefix-". Vous pouvez modifier les variables IfUnused, IfEmpty et MatchRegex selon vos besoins.
rabbitmqadmin
n'est pas accessible.
Dans le cas où vous souhaitez purger uniquement 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, il faut 2-3 secondes pour purger une file d'attente (vides et non vides), donc parcourir 50 files d'attente est tellement pénible alors que j'ai juste besoin d'en purger 10 (40/50 sont vides).
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 vhost /
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
Voici une version plus rapide (utilisant 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)
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 super simple car il utilise -f bash
, qui génère les files d'attente sous forme de liste.
Ensuite, nous utilisons xargs -n1
pour diviser cela en plusieurs variables
Ensuite, nous utilisons xargs -I{}
qui exécutera la commande suivante et la remplacera {}
dans la commande.
http://yourhost:15672/cli/
et le télécharger.
Vous n'avez pas besoin de réinitialiser le serveur rabbitmq pour supprimer les files d'attente non durables . Arrêtez simplement le serveur et redémarrez et il supprimera toutes les files d'attente non durables disponibles.
Pour ceux qui ont un problème avec l'installation de rabbitmqadmin, vous devez d'abord installer python.
Les utilisateurs de systèmes d'exploitation de type UNIX doivent copier rabbitmqadmin dans un répertoire de PATH, par exemple / usr / local / bin.
Les utilisateurs Windows devront s'assurer que Python est sur leur PATH et appeler rabbitmqadmin en tant que python.exe rabbitmqadmin.
ensuite
http://{hostname}:15672/cli/rabbitmqadmin
pour télécharger.Pour répertorier les files d'attente
python rabbitmqadmin list queues
.
Pour supprimer la file d'attente
python rabbitmqadmin delete queue name=Name_of_queue
Pour supprimer toutes les files d'attente
1- Déclarer la politique
python rabbitmqadmin declare policy name='expire_all_policies' pattern=.* definition={\"expires\":1} apply-to=queues
2- Supprimer la politique
python rabbitmqadmin delete policy name='expire_all_policies'
Il existe un moyen de supprimer toutes les files d'attente et tous les échanges sans scripts 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/
.
La seule chose que vous aurez besoin de restaurer est les autorisations pour le vhost nouvellement créé.
D'accord, qualificatif important pour cette réponse: la question demande d'utiliser rabbitmqctl OU rabbitmqadmin pour résoudre cela, ma réponse devait utiliser les deux. Notez également que cela a été testé sur MacOS 10.12.6 et les versions du rabbitmqctl et rabbitmqadmin qui sont installés lors de l' installation rabbitmq avec Homebrew et qui est identifié avec brew list --versions
comme 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
Une autre option consiste à supprimer l'hôte virtuel associé aux files d'attente. Cela supprimera tout ce qui est associé au vhost, alors soyez prévenu, mais c'est facile et rapide.
REMARQUE: l'équipe RabbitMQ surveille la rabbitmq-users
liste de diffusion et ne répond que parfois aux questions sur StackOverflow.
J'ai essayé les morceaux de code ci-dessus mais je n'ai fait aucun 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 files d'attente et les parcourt ligne par ligne pour les supprimer. Pour les boucles, while read ...
je ne l'ai pas fait pour moi. Il s'arrêtait toujours au premier nom de file d'attente.
rabbitmqadmin list queues|awk 'NR>3{print $4}'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname
rabbitmqctl list_queues name messages messages_ready \ messages_unacknowledged