Come posso eliminare tutti i messaggi da una singola coda usando l'interfaccia della riga di comando?


143

Come posso eliminare tutti i messaggi da una singola coda usando il cli? Ho il nome della coda e voglio pulirlo.

Risposte:



141

puoi eseguire direttamente questo comando

sudo rabbitmqctl purge_queue queue_name

15
oppure, se si dispone di un host virtuale, dorabbitmqctl purge_queue queue_name -p my_virt_host
goat

4
esegui sudo rabbitmqctl -h e controlla l'elenco di cammand elencato dal tuo conigliomq attuale. se non è presente significa che la versione corrente di rabbitmq non supporta questa funzione.
Anurag jain

Questo non ha funzionato per me - non appena il mio consumatore si è acceso, la coda era ancora piena di attività.
Jamie Ivanov,

Questo avrebbe potuto essere implementato in 3.5.4 o 3.6.0, basato su github.com/rabbitmq/rabbitmq-server/pull/215 e rabbitmq.com/changelog.html . Se si dispone di una versione precedente, come da rabbitmqadmin stackoverflow.com/a/18267342/272387 aiuto potrebbe.
Richlv,

1
... e controllando su github.com/rabbitmq/rabbitmq-server/releases/tag/… , questa funzione è apparsa in 3.5.4.
Richlv,

16

Per eliminare la coda è possibile utilizzare il comando seguente (ulteriori informazioni nel documento API):

curl -i -u guest:guest -XDELETE http://localhost:15672/api/queues/vhost_name/queue_name/contents

Un po 'spaventoso quanto bene ha funzionato. Qualche modo per proteggersi da questo accada involontariamente? Come una configurazione per i server di produzione che disabilita questa funzionalità per prevenire la perdita accidentale di dati?
Isaia,

Sì, la protezione sarebbe quella di eliminare l'utente "guest" usando il comando "delete_user"
Ocean Airdrop,

16

RabbitMQ implementa il protocollo di accodamento messaggi avanzato (AMQP) in modo da poter utilizzare strumenti generici per cose come questa.

Su Debian / Ubuntu o un sistema simile, fare:

sudo apt-get install amqp-tools
amqp-delete-queue -q celery  # where celery is the name of the queue to delete

Questa è una buona soluzione per alcune versioni che non hanno rabbitmqadmin.
WisZhou,

11
Questo elimina l'intera coda, non solo eliminarla. Quindi la coda non esiste più e successivamente è necessario inizializzare nuovamente la coda vuota.
krob,

13

RabbitMQ ha 2 cose in coda

  1. Elimina
  2. Epurazione

Elimina: eliminerà la coda

Elimina: questo svuoterà la coda (il che significa che rimuove i messaggi dalla coda ma la coda esiste ancora)


1
Potrebbe sembrare semplice, ma questa era la risposta di cui avevo bisogno.
Nick Pickering,

8

NOTA IMPORTANTE: questo eliminerà tutti gli utenti e la configurazione.

METTERE IN GUARDIA !!

METTERE IN GUARDIA !!

Non suggerisco questa risposta fino a quando non si desidera eliminare i dati da tutte le code, inclusi utenti e configurazioni. Basta resettarlo !!!

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

28
Ciò ripristina anche i tuoi utenti e altre configurazioni!
Codewithcheese,

L'ho usato come parte dei test unitari. ad esempio, desidero cancellare tutto, quindi impostarlo a livello di programmazione tramite stackoverflow.com/questions/4545660/…, quindi popolare alcuni messaggi ed eseguire test in black box per assicurarmi che i messaggi siano stati esaminati. Funziona benissimo per questo scopo. :)
James Oravec,

3
È davvero ingenuo. Non è accettabile come risposta a una domanda seria. Distruggerà tutti i dati del server.
Andre Pastore,

2
l'azzeramento della memoria e la reinstallazione del sistema operativo eliminano anche i dati; questo non è ciò che OP sta chiedendo
istepaniuk,

5

Immagino sia tardi, ma per altri riferimenti, questo può essere fatto con 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
ciao @prajnavantha è pika ha qualche metodo solo messaggio chiaro? (non eliminare la coda)
Jade Han,

2

Ho usato con successo ampq-purgeda amqp-utils per fare questo:

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

Per eliminare solo i messaggi dalla coda utilizzare:

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

Per eliminare una coda vuota ( --if-empty ) o priva di consumatori ( --if-unused ) usare:

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

o

sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-unused 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.