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.