Supprimer les files d'attente dans RabbitMQ

J'ai quelques Files d'attente avec RabbitMQ. Quelques-uns d'entre eux sont d'aucune utilité maintenant, comment puis-je les supprimer? Malheureusement, je n'avais pas défini l'option auto_delete .

si je le mets maintenant, sera-t-il supprimé?

Est-il un moyen de supprimer les files d'attente maintenant?

81
demandé sur wonea 2011-07-19 10:07:28

13 réponses

si vous ne vous souciez pas des autres Files d'attente, vous pouvez les supprimer toutes via la ligne de commande en exécutant les commandes suivantes dans l'ordre:

Avertissement: ce sera aussi supprimer tout utilisateurs et virtuels vous avez configuré sur votre lapin serveur

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

la documentation de rabbitmq dit que la commande reset :

supprime le noeud de n'importe quel cluster auquel il appartient, supprime toutes les données de la base de données de gestion, comme les utilisateurs configurés et les serveurs virtuels, et supprime tous les messages persistants.

donc, faites attention en l'utilisant.

112
répondu Faruk Sahin 2017-01-10 20:07:16

dans les versions de RabbitMQ > 3.0, vous pouvez également utiliser L'API HTTP si le plugin rabbitmq_management est activé. Assurez-vous simplement de définir le type de contenu à 'application/json' et de fournir le nom du serveur virtuel et de la file d'attente:

C'est-à-dire en utilisant curl avec un vhost 'test' et le nom de la file d'attente 'testqueue':

$ curl -i -u guest:guest -H "content-type:application/json" -XDELETE http://localhost:15672/api/queues/test/testqueue
HTTP/1.1 204 No Content
Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue)
Date: Tue, 16 Apr 2013 10:37:48 GMT
Content-Type: application/json
Content-Length: 0
25
répondu phriscage 2013-04-17 14:28:22
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters(
               'localhost'))
channel = connection.channel()

channel.queue_delete(queue='queue-name')

connection.close()

installer le paquet pika comme suit

$ sudo pip install pika==0.9.8

l'installation dépend des paquets pip et git-core, vous devrez peut-être les installer en premier.

Sur Ubuntu:

$ sudo apt-get install python-pip git-core

Sur Debian:

$ sudo apt-get install python-setuptools git-core
$ sudo easy_install pip

sous Windows: pour installer easy_install, Lancez L'installateur MS Windows pour setuptools

> easy_install pip
> pip install pika==0.9.8
25
répondu Shweta B. Patil 2013-11-11 19:14:04

Il y a rabbitmqadmin ce qui est agréable à travailler à partir de la console.

si vous vous connectez au serveur où rabbit est installé, vous pouvez le télécharger à partir de:

http://{server}:15672/cli/rabbitmqadmin

et sauvegardez-le dans / usr / local/bin / rabbitmqadmin

alors vous pouvez exécuter

rabbitmqadmin -u {user} -p {password} -V {vhost} delete queue name={name}

nécessite habituellement sudo.

Si vous voulez éviter de taper votre nom d'utilisateur et mot de passe, vous pouvez utiliser config

rabbitmqadmin -c /var/lib/rabbitmq/.rabbitmqadmin.conf -V {vhost} delete queue name={name}

tout cela en supposant que vous avez file ** /var/lib/rabbitmq/.rabbitmqadmin.conf * * et ont le minumum nu

hostname = localhost
port = 15672
username = {user}
password = {password}

modifier: à partir du commentaire de @user299709, il pourrait être utile de souligner que l'utilisateur doit être étiqueté comme "administrateur" dans rabbit. ( https://www.rabbitmq.com/management.html )

20
répondu Lukino 2015-10-22 14:29:35

vous affirmez qu'une file existe (et la créer si elle n'existe pas) en utilisant file.déclarer . Si vous avez à l'origine défini auto-delete à false, appelant queue.declare again with autodelete true se traduira par une erreur douce et le courtier fermera le canal.

vous devez utiliser queue.supprimer maintenant afin de le supprimer.

voir la documentation API pour plus de détails:

si vous utilisez un autre client, vous devez trouver la méthode équivalente. Comme il fait partie du protocole, il devrait être là, et c'est probablement la partie de Canal ou l'équivalent.

vous pourriez également vouloir jeter un oeil au reste de la documentation, en particulier le Geting Commencé qui couvre beaucoup de cas d'utilisation courants.

enfin, si vous avez une question et que vous ne trouvez pas la réponse ailleurs, vous devriez essayer de l'afficher sur la liste de diffusion RabbitMQ discuter . Les développeurs font de leur mieux pour répondre à toutes les questions posées.

14
répondu scvalex 2011-07-19 07:44:00

un court résumé pour la suppression rapide de la file d'attente avec toutes les valeurs par défaut de l'hôte qui exécute le serveur RMQ:

curl -O http://localhost:15672/cli/rabbitmqadmin
chmod u+x rabbitmqadmin
./rabbitmqadmin delete queue name=myQueueName

pour supprimer toutes les files d'attente correspondant à un motif dans un vhost donné (p.ex. contenant 'amq.gen' à la racine du serveur virtuel):

rabbitmqctl -p / list_queues | grep 'amq.gen' | cut -f1 -d$'\t' | xargs -I % ./rabbitmqadmin -V / delete queue name=%
13
répondu Sergey Shcherbakov 2016-04-15 10:30:32

une autre option serait d'activer la management_plugin et de s'y connecter via un navigateur. Vous pouvez voir toutes les files d'attente et des informations à leur sujet. Il est possible et simple de supprimer des files d'attente à partir de cette interface.

10
répondu robthewolf 2012-05-02 11:13:39

J'ai généralisé un peu plus loin la méthode JavaScript/jQuery de Piotr Stapp, en l'encapsulant dans une fonction et en la généralisant un peu.

cette fonction utilise L'API HTTP RabbitMQ pour interroger les files d'attente disponibles dans un vhost donné , puis les supprimer sur la base d'une option queuePrefix :

function deleteQueues(vhost, queuePrefix) {
    if (vhost === '/') vhost = '%2F';  // html encode forward slashes
    $.ajax({
        url: '/api/queues/'+vhost, 
        success: function(result) {
            $.each(result, function(i, queue) {
                if (queuePrefix && !queue.name.startsWith(queuePrefix)) return true;
                $.ajax({
                    url: '/api/queues/'+vhost+'/'+queue.name, 
                    type: 'DELETE', 
                    success: function(result) { console.log('deleted '+ queue.name)}
                });
            });
        }
    });
};

une fois que vous collez cette fonction dans la console JavaScript de votre navigateur alors que sur votre page de gestion RabbitMQ, vous pouvez l'utiliser comme ceci:

supprimer toutes les files d'attente dans " / "vhost

deleteQueues('/');

Supprimer toutes les files d'attente dans " / vhost commençant par 'test'

deleteQueues('/', 'test');

supprimer toutes les files d'attente dans 'dev' vhost commençant par 'foo'

deleteQueues('dev', 'foo');

merci de l'utiliser à vos risques et périls!

7
répondu Josh 2016-01-14 20:19:02

le plugin de gestion (interface web) vous donne un lien vers un script python. Vous pouvez l'utiliser pour supprimer les files d'attente. J'ai utilisé ce modèle pour supprimer beaucoup de files d'attente:

python tmp/rabbitmqadmin --vhost=... --username=... --password=... list queues > tmp/q

vi tmp/q # remove all queues which you want to keep

cut -d' ' -f4 tmp/q| while read q; 
    do python tmp/rabbitmqadmin --vhost=... --username=... --password=... delete queue name=$q; 
done
6
répondu guettli 2013-03-21 15:41:35

j'utilise cet alias dans .profile :

alias qclean="rabbitmqctl list_queues | python ~/bin/qclean.py"

qclean.py a le code suivant:

import sys
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()

queues = sys.stdin.readlines()[1:-1]
for x in queues:
    q = x.split()[0]
    print 'Deleting %s...' %(q)
    channel.queue_delete(queue=q)

connection.close()

essentiellement, il s'agit d'une version itérative du code de Shweta B. Patil.

5
répondu Vladimir 2014-03-22 13:27:56

avec le plugin rabbitmq_management installé, vous pouvez exécuter ceci pour supprimer toutes les files d'attente indésirables:

rabbitmqctl list_queues -p vhost_name |\
grep -v "fast\|medium\|slow" |\
tr "[:blank:]" " " |\
cut -d " " -f 1 |\
xargs -I {} curl -i -u guest:guest -H "content-type:application/json" -XDELETE http://localhost:15672/api/queues/<vhost_name>/{}

décomposons la commande:

rabbitmqctl list_queues -p vhost_name va énumérer toutes les files d'attente et le nombre de tâches qu'ils ont actuellement.

grep -v "fast\|medium\|slow" va filtrer les files d'attente, vous ne voulez pas supprimer, disons que nous voulons supprimer chaque file d'attente sans les mots rapide , moyen ou lent .

tr "[:blank:]" " " normalisera le délimiteur sur rabbitmqctl entre le nom de la file d'attente et le nombre de tâches qu'il y a

cut -d " " -f 1 sera split chaque ligne par l'espace et de choisir la 1ère colonne (le nom de file d'attente)

xargs -I {} curl -i -u guest:guest -H "content-type:application/json" -XDELETE http://localhost:15672/api/queues/<vhost>/{} récupérera le nom de la file d'attente et le définira dans l'endroit où nous définirons le caractère {} supprimant tous les files d'attente non filtré dans le processus.

assurez-vous que l'utilisateur a été utilisé des autorisations d'administrateur.

3
répondu Hassek 2016-10-18 13:34:25

Je l'ai fait de manière différente, parce que je n'avais accès qu'à la page Web de gestion. J'ai créé simple "snippet" qui suppriment les files D'attente dans Javascript. Le voici:

function zeroPad(num, places) {
  var zero = places - num.toString().length + 1;
  return Array(+(zero > 0 && zero)).join("0") + num;
}
var queuePrefix = "PREFIX"
for(var i=0; i<255; i++){ 
   var queueid = zeroPad(i, 4);
   $.ajax({url: '/api/queues/vhost/'+queuePrefix+queueid, type: 'DELETE', success: function(result) {console.log('deleted '+queuePrefix+queueid)}});
}

toutes mes Files d'attente étaient au format: PREFIX_0001 au PREFIX_0XXX

2
répondu Piotr Stapp 2014-07-25 07:21:30

installer

$ sudo rabbitmq-plugins enable rabbitmq_management

et passer à http://localhost:15672/#/queues si vous utilisez localhost. le mot de passe par défaut sera username: guest , password: guest et aller à l'onglet files d'attente et de supprimer la file d'attente.

2
répondu zabusa 2018-02-01 05:03:30