Comment supprimer tous les messages d'une seule file d'attente à l'aide de la CLI?

143

Comment supprimer tous les messages d'une seule file d'attente à l'aide du cli? J'ai le nom de la file d'attente et je veux le nettoyer.

Bick
la source

Réponses:

121

rabbitmqadmin est l'outil parfait pour cela

rabbitmqadmin purge queue name=name_of_the_queue_to_be_purged
pr4n
la source
5
J'ai eu du mal à trouver l'outil dans mon installation rabbitmq. Je l'ai finalement téléchargé à partir d'ici: hg.rabbitmq.com/rabbitmq-management/raw-file/rabbitmq_v3_3_5
...
5
Si vous avez déjà installé le plugin de gestion, vous pouvez le télécharger à partir dehttp://rabbitserver:15672/cli/
morloch
141

vous pouvez exécuter directement cette commande

sudo rabbitmqctl purge_queue queue_name
Anurag jain
la source
15
ou, si vous avez un hôte virtuel, faites-lerabbitmqctl purge_queue queue_name -p my_virt_host
chèvre
4
lancez sudo rabbitmqctl -h et vérifiez la liste des cammand répertoriés par votre rabbitmq actuel. si ce n'est pas là, cela signifie que la version actuelle de rabbitmq ne prend pas en charge cette fonctionnalité.
Anurag jain
Cela n'a pas fonctionné pour moi - dès que mon consommateur s'est déclenché, la file d'attente était encore pleine de tâches.
Jamie Ivanov
Cela aurait pu être implémenté dans 3.5.4 ou 3.6.0, basé sur github.com/rabbitmq/rabbitmq-server/pull/215 et rabbitmq.com/changelog.html . Si vous avez une version plus ancienne, rabbitmqadmin selon stackoverflow.com/a/18267342/272387 peut vous aider.
Richlv
1
... et en vérifiant dans github.com/rabbitmq/rabbitmq-server/releases/tag/… , cette fonctionnalité est apparue dans 3.5.4.
Richlv
16

Pour purger la file d'attente, vous pouvez utiliser la commande suivante (plus d'informations dans le document API):

curl -i -u guest:guest -XDELETE http://localhost:15672/api/queues/vhost_name/queue_name/contents
Olga
la source
Un peu effrayant à quel point cela a fonctionné. Un moyen de se protéger contre ce qui se passe involontairement? Comme une configuration pour les serveurs de production qui désactive cette fonctionnalité pour éviter la perte accidentelle de données?
Isaiah
Ouais, la protection serait de supprimer l'utilisateur "guest" en utilisant la commande "delete_user"
Ocean Airdrop
16

RabbitMQ implémente le protocole AMQP (Advanced Message Queuing Protocol) afin que vous puissiez utiliser des outils génériques pour des choses comme celle-ci.

Sur Debian / Ubuntu ou un système similaire, faites:

sudo apt-get install amqp-tools
amqp-delete-queue -q celery  # where celery is the name of the queue to delete
Benjaoming
la source
C'est une bonne solution pour certaines versions ne disposant pas de rabbitmqadmin.
WisZhou
11
Cela supprime toute la file d'attente, ne la purge pas seulement. Ainsi, la file d'attente n'existe plus et vous devez ensuite réinitialiser la file d'attente vide.
krob
13

RabbitMQ a 2 choses sous la file d'attente

  1. Supprimer
  2. Purge

Supprimer - supprimera la file d'attente

Purge - Cela videra la file d'attente (ce qui signifie supprime les messages de la file d'attente mais la file d'attente existe toujours)

Guru Prasad
la source
1
Cela peut sembler simple, mais c'était la réponse dont j'avais besoin.
Nick Pickering
8

REMARQUE IMPORTANTE: Cela supprimera tous les utilisateurs et config.

ALERTE !!

ALERTE !!

Je ne suggère cette réponse qu'à moins que vous ne souhaitiez supprimer les données de toutes les files d'attente, y compris les utilisateurs et les configurations. Réinitialisez-le simplement !!!

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
Naren
la source
28
Cela réinitialise également vos utilisateurs et autres configurations!
Codewithcheese
Je l'ai utilisé dans le cadre de tests unitaires. par exemple, j'efface tout, puis je configure tout par programmation via stackoverflow.com/questions/4545660/ ... puis je remplis quelques messages et fais des tests de boîte noire pour m'assurer que les messages sont passés. Fonctionne très bien à cet effet. :)
James Oravec
3
C'est vraiment naïf. Ce n'est pas acceptable comme réponse à une question sérieuse. Cela détruira toutes les données du serveur.
Andre Pastore
2
la remise à zéro de votre stockage et la réinstallation du système d'exploitation suppriment également les données; ce n'est pas ce que demande OP
istepaniuk
5

Je suppose que c'est tard mais pour d'autres références, cela peut être fait avec pika

import pika
host_ip = #host ip
channel = pika.BlockingConnection(pika.ConnectionParameters(host_ip,
                                                        5672,
                                                        "/",
credentials=pika.PlainCredentials("username","pwd"))).channel()
print "deleting queue..", channel.queue_delete(queue=queue_name)
Prajnavantha
la source
1
salut @prajnavantha est-ce que pika a un message clair de méthode seulement? (ne pas supprimer la file d'attente)
Jade Han
2

Je l' ai utilisé avec succès ampq-purgede AMQP-utils pour ce faire:

git clone https://github.com/dougbarth/amqp-utils.git
cd amqp-utils
# extracted from Rakefile
echo "source 'https://rubygems.org'
gem 'amqp', '~> 0.7.1'
gem 'trollop', '~> 1.16.2'
gem 'facets', '~> 2.9'
gem 'clio', '~> 0.3.0'
gem 'json', '~> 1.5'
gem 'heredoc_unindent', '~> 1.1.2'
gem 'msgpack', '~> 0.4.5'" > Gemfile
bundle install --path=$PWD/gems
export RUBYLIB=.
export GEM_HOME=$PWD/gems/ruby/1.9.1

ruby bin/amqp-purge -v -V /vhost -u user -p queue
# paste password at prompt
andrewdotn
la source
2

Pour supprimer uniquement les messages de la file d'attente, utilisez:

sudo rabbitmqctl --node <nodename> purge_queue <queue_name>

Pour supprimer une file d'attente vide ( --if-empty ) ou n'a pas de consommateurs ( --if-non utilisé ), utilisez:

sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-empty

ou

sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-unused 
Ashwani Singh
la source