web-dev-qa-db-fra.com

Supprimer toutes les files d'attente de RabbitMQ?

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?.

165
Cory

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
247
lukiffer

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
43
admenva

Essaye ça: 

 rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
19
Gathole

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

    • Hôte virtuel: Select
    • Nom: Expirer toutes les règles (supprimer plus tard)
    • Modèle: .*
    • Appliquer à: Files d'attente
    • Définition: expire avec la valeur 1 (change le type de String en Number)
  • Sauvegarder

  • Checkout Queues tab à nouveau
  • Toutes les files d'attente doivent être supprimées
  • Et n'oubliez pas de retirer la politique !!!!!! .
12
Mesut A.

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!

6
Dan

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

6
user783836

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

6
Anatoly Rugalev

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)
 }
5
klumsy

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.

3
George Ninan

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
3
Marian

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

2
Duc Tran

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
2
Isuru Dewasurendra

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.

1
Kevin Simper

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)

1
alonisser

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.

1
ErAcube

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
1
Mohammad Naseri

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.

0
Julien Nyambal

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

0
Brett Tofel

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éé.

0
starteleport

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 /

0
Aalex Gabi

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.

0
Luke Bakken