Bagaimana cara saya menghapus semua pesan dari satu antrian menggunakan CLI?

143

Bagaimana cara menghapus semua pesan dari satu antrian menggunakan cli? Saya memiliki nama antrian dan saya ingin membersihkannya.

Bick
sumber

Jawaban:

121

rabbitmqadmin adalah alat yang sempurna untuk ini

rabbitmqadmin purge queue name=name_of_the_queue_to_be_purged
pr4n
sumber
5
Saya kesulitan menemukan alat di instalasi rabbitmq saya. Saya akhirnya mengunduhnya dari sini: hg.rabbitmq.com/rabbitmq-management/raw-file/rabbitmq_v3_3_5/…
FactualHarmony
5
Jika Anda sudah menginstal plugin manajemen, Anda dapat mengunduhnya darihttp://rabbitserver:15672/cli/
morloch
141

Anda dapat langsung menjalankan perintah ini

sudo rabbitmqctl purge_queue queue_name
Anurag jain
sumber
15
atau, jika Anda memiliki host virtual, dorabbitmqctl purge_queue queue_name -p my_virt_host
goat
4
jalankan sudo rabbitmqctl -h dan periksa daftar cammand yang terdaftar oleh rabbitmq Anda saat ini. jika tidak ada di sana itu berarti versi rabbitmq saat ini tidak mendukung fitur ini.
Anurag jain
Ini tidak berhasil untuk saya - begitu konsumen saya bersemangat, antrian masih penuh dengan tugas.
Jamie Ivanov
Ini bisa diterapkan di 3.5.4 atau 3.6.0, berdasarkan github.com/rabbitmq/rabbitmq-server/pull/215 dan rabbitmq.com/changelog.html . Jika Anda memiliki versi yang lebih lama, rabbitmqadmin sesuai stackoverflow.com/a/18267342/272387 mungkin membantu.
Richlv
1
... dan memeriksa di github.com/rabbitmq/rabbitmq-server/releases/tag/… , fitur ini muncul di 3.5.4.
Richlv
16

Untuk membersihkan antrian, Anda dapat menggunakan perintah berikut (informasi lebih lanjut di API doc):

curl -i -u guest:guest -XDELETE http://localhost:15672/api/queues/vhost_name/queue_name/contents
Olga
sumber
Agak menakutkan seberapa baik ini bekerja. Adakah cara untuk melindungi dari kejadian ini secara tidak sengaja? Seperti konfigurasi untuk server produksi yang menonaktifkan fungsi ini untuk mencegah kehilangan data yang tidak disengaja?
Yesaya
Ya, perlindungannya adalah menghapus pengguna "tamu" menggunakan perintah "delete_user"
Ocean Airdrop
16

RabbitMQ mengimplementasikan Advanced Message Queuing Protocol (AMQP) sehingga Anda dapat menggunakan alat umum untuk hal-hal seperti ini.

Di Debian / Ubuntu atau sistem serupa, lakukan:

sudo apt-get install amqp-tools
amqp-delete-queue -q celery  # where celery is the name of the queue to delete
benjaoming
sumber
Itu solusi yang bagus karena beberapa versi tidak memiliki rabbitmqadmin.
WisZhou
11
Ini menghapus seluruh antrian, tidak hanya membersihkannya. Jadi antrian tidak ada lagi dan Anda harus menginisialisasi ulang antrian kosong setelahnya.
krob
13

RabbitMQ memiliki 2 hal yang sedang dalam antrian

  1. Menghapus
  2. Membersihkan

Hapus - akan menghapus antrian

Purge - Ini akan mengosongkan antrian (artinya menghapus pesan dari antrian tetapi antrian masih ada)

Guru Prasad
sumber
1
Ini mungkin terlihat sederhana, tetapi ini adalah jawaban yang saya butuhkan.
Nick Pickering
8

CATATAN PENTING: Ini akan menghapus semua pengguna dan konfigurasi.

PERINGATAN !!

PERINGATAN !!

Saya tidak menyarankan jawaban ini sampai kecuali Anda ingin menghapus data dari semua antrian, termasuk pengguna dan konfigurasi. Setel Ulang Saja !!!

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
naren
sumber
28
Itu juga mengatur ulang pengguna Anda dan konfigurasi lainnya!
Codewithcheese
Saya menggunakan ini sebagai bagian dari unit test. misalnya saya menghapus semuanya, kemudian mengatur semuanya secara pemrograman melalui stackoverflow.com/questions/4545660/… kemudian mengisi beberapa pesan dan melakukan pengujian kotak hitam untuk memastikan pesan-pesan masuk. Berfungsi bagus untuk tujuan ini. :)
James Oravec
3
Benar-benar naif. Itu tidak dapat diterima sebagai jawaban untuk pertanyaan serius. Ini akan menghancurkan semua data server.
Andre Pastore
2
memusatkan penyimpanan Anda dan menginstal ulang OS juga menghilangkan data; ini bukan yang diminta OP
istepaniuk
5

Saya kira sudah terlambat tapi untuk referensi orang lain, ini bisa dilakukan dengan 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
sumber
1
hai @prajnavantha apakah pika hanya memiliki metode pesan yang jelas? (tidak menghapus antrian)
Jade Han
2

Saya telah berhasil menggunakan ampq-purgedari amqp-utils untuk melakukan ini:

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

Untuk menghapus hanya pesan dari penggunaan antrian:

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

Untuk menghapus antrian yang kosong ( --jika kosong ) atau tidak memiliki konsumen ( --jika tidak digunakan ) gunakan:

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

atau

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