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.

Réponses:



141

vous pouvez exécuter directement cette commande

sudo rabbitmqctl purge_queue queue_name

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

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

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)


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

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)

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

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 
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.