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.

Jawaban:



141

Anda dapat langsung menjalankan perintah ini

sudo rabbitmqctl purge_queue queue_name

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

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

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)


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

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)

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

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 
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.