Wie lösche ich alle Nachrichten mithilfe der CLI aus einer einzelnen Warteschlange?

142

Wie lösche ich alle Nachrichten mit der CLI aus einer einzelnen Warteschlange? Ich habe den Namen der Warteschlange und möchte ihn bereinigen.

Bick
quelle

Antworten:

121

rabbitmqadmin ist das perfekte Werkzeug dafür

rabbitmqadmin purge queue name=name_of_the_queue_to_be_purged
pr4n
quelle
5
Es fiel mir schwer, das Tool in meiner rabbitmq-Installation zu finden. Ich habe es endlich von hier heruntergeladen: hg.rabbitmq.com/rabbitmq-management/raw-file/rabbitmq_v3_3_5/…
FactualHarmony
5
Wenn Sie das Management-Plugin bereits installiert haben, können Sie es vonhttp://rabbitserver:15672/cli/
morloch
140

Sie können diesen Befehl direkt ausführen

sudo rabbitmqctl purge_queue queue_name
Anurag Jain
quelle
15
oder, wenn Sie einen virtuellen Host haben, tunrabbitmqctl purge_queue queue_name -p my_virt_host
Ziege
4
Führen Sie sudo rabbitmqctl -h aus und überprüfen Sie die Liste der von Ihrem aktuellen rabbitmq aufgelisteten cammand. Wenn es nicht vorhanden ist, bedeutet dies, dass die aktuelle Version von rabbitmq diese Funktion nicht unterstützt.
Anurag Jain
Dies funktionierte bei mir nicht - sobald mein Verbraucher sich meldete, war die Warteschlange immer noch voller Aufgaben.
Jamie Ivanov
Dies könnte entweder in 3.5.4 oder 3.6.0 implementiert worden sein, basierend auf github.com/rabbitmq/rabbitmq-server/pull/215 und rabbitmq.com/changelog.html . Wenn Sie eine ältere Version haben, kann rabbitmqadmin gemäß stackoverflow.com/a/18267342/272387 hilfreich sein.
Richlv
1
... und beim Einchecken in github.com/rabbitmq/rabbitmq-server/releases/tag/… wurde diese Funktion in 3.5.4 angezeigt.
Richlv
16

Zum Löschen der Warteschlange können Sie den folgenden Befehl verwenden (weitere Informationen im API-Dokument):

curl -i -u guest:guest -XDELETE http://localhost:15672/api/queues/vhost_name/queue_name/contents
Olga
quelle
Ein bisschen beängstigend, wie gut das funktioniert hat. Gibt es eine Möglichkeit, sich davor zu schützen, dass dies ungewollt geschieht? Zum Beispiel eine Konfiguration für Produktionsserver, die diese Funktionalität deaktiviert, um versehentlichen Datenverlust zu verhindern?
Jesaja
Ja, der Schutz wäre, den Benutzer "guest" mit dem Befehl "delete_user" zu löschen
Ocean Airdrop
16

RabbitMQ implementiert das Advanced Message Queuing Protocol (AMQP), sodass Sie für solche Dinge generische Tools verwenden können.

Führen Sie auf Debian / Ubuntu oder einem ähnlichen System Folgendes aus:

sudo apt-get install amqp-tools
amqp-delete-queue -q celery  # where celery is the name of the queue to delete
benjaoming
quelle
Das ist eine gute Lösung für einige Versionen, die kein rabbitmqadmin haben.
WisZhou
11
Dadurch wird die gesamte Warteschlange gelöscht und nicht nur gelöscht. Die Warteschlange existiert also nicht mehr und Sie müssen die leere Warteschlange anschließend neu initialisieren.
Krob
13

RabbitMQ hat 2 Dinge in der Warteschlange

  1. Löschen
  2. Spülen

Löschen - löscht die Warteschlange

Bereinigen - Hiermit wird die Warteschlange geleert (dh Nachrichten werden aus der Warteschlange entfernt, aber die Warteschlange ist noch vorhanden).

Guru Prasad
quelle
1
Es mag einfach erscheinen, aber das war die Antwort, die ich brauchte.
Nicholas Pickering
8

WICHTIGER HINWEIS: Dadurch werden alle Benutzer und Konfigurationen gelöscht.

ALERT !!

ALERT !!

Ich schlage diese Antwort erst vor, wenn Sie Daten aus allen Warteschlangen löschen möchten, einschließlich Benutzer und Konfigurationen. Einfach zurücksetzen !!!

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
naren
quelle
28
Das setzt auch Ihre Benutzer und andere Konfigurationen zurück!
Codewithcheese
Ich habe dies als Teil von Unit-Tests verwendet. Beispiel: Ich lösche alles, richte alles programmgesteuert über stackoverflow.com/questions/4545660/… ein, fülle dann einige Nachrichten aus und führe Black-Box-Tests durch, um sicherzustellen, dass Nachrichten durchlaufen wurden. Funktioniert hervorragend für diesen Zweck. :)
James Oravec
3
Es ist wirklich naiv. Es ist nicht akzeptabel als Antwort auf eine ernste Frage. Es werden alle Serverdaten zerstört.
Andre Pastore
2
Wenn Sie Ihren Speicher auf Null setzen und das Betriebssystem neu installieren, werden auch die Daten entfernt. Dies ist nicht, was OP fragt
istepaniuk
5

Ich denke, es ist spät, aber für andere Referenz kann dies mit Pika gemacht werden

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
quelle
1
Hallo @prajnavantha ist Pika hat eine Methode nur klare Nachricht? (Warteschlange nicht löschen)
Jade Han
2

Ich habe erfolgreich ampq-purgevon amqp-utils verwendet , um dies zu tun:

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
quelle
2

Um nur Nachrichten aus der Warteschlange zu löschen, verwenden Sie:

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

Um eine Warteschlange zu löschen, die leer ist ( --if-leer ) oder keine Verbraucher hat ( --if-unbenutzt ), verwenden Sie:

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

oder

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