Jawaban:
Pertama, daftarkan antrian Anda:
rabbitmqadmin list queues name
Kemudian dari daftar, Anda harus menghapusnya secara manual satu per satu:
rabbitmqadmin delete queue name='queuename'
Karena format output, tidak muncul Anda dapat menerima tanggapan dari list queues
. Atau, jika Anda hanya mencari cara untuk menghapus semuanya (baca: setel ulang semua pengaturan , kembalikan instalasi ke keadaan default), gunakan:
rabbitmqctl stop_app
rabbitmqctl reset # Be sure you really want to do this!
rabbitmqctl start_app
rabbitmqctl list_queues | grep 0 | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn
grep $'\t0'
atau sesuatu.
Dengan rabbitmqadmin
Anda dapat menghapusnya dengan liner satu ini:
rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
egrep
, jadi perintah saya akan terlihat seperti ini:rabbitmqadmin -f tsv -q list queues name | egrep "%search word%" | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
Sebenarnya sangat mudah dengan plugin dan kebijakan manajemen :
Konsol Manajemen Goto (localhost: 15672)
Tab Admin Goto
Tab Kebijakan Goto (di sebelah kanan)
Tambahkan Kebijakan
Isi Fields
Menyimpan
Coba ini:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
*** Not found: /api/queues/%2F/name
karena outputnya adalah tabel ASCII dengan kolom "nama". Saya mengubah perintah rabbitmqadmin list queues name | awk '!/--|name/ {print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
untuk memperbaikinya.
rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
Jika Anda belum menginstal rabbitmqadmin, coba bersihkan antrian dengan rabbitmqctl:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
delete_queue
atau purge_queue
perintah di rabbitmqctl
. Saya ingin membersihkan banyak antrian yang tampaknya dibuat secara otomatis dan saya tidak ingin menginstal perangkat lunak tambahan seperti rabbitmqadmin
...
rabbitmqctl purge_queue
bekerja di sini secara manual. Saya hanya perlu menambahkan -p <virtual-host>
delete_queue
dan purge_queue
tersedia dalam rabbitmqctl
dan saya baru saja menjalankan mereka berhasil. Mungkin Anda menggunakan versi lama.
Jika Anda mencoba untuk menghapus antrian karena tidak digunakan dan Anda tidak ingin mengatur ulang, salah satu opsi adalah mengatur antrian TTL sangat rendah melalui kebijakan, tunggu antrian dihapus secara otomatis setelah TTL disahkan dan kemudian hapus kebijakan ( https://www.rabbitmq.com/ttl.html ).
rabbitmqctl.bat set_policy delq ".*" '{"expires": 1}' --apply-to queues
Untuk menghapus kebijakan
rabbitmqctl clear_policy delq
Perhatikan bahwa ini hanya berfungsi untuk antrian yang tidak digunakan
Info asli di sini: http://rabbitmq.1065348.n5.nabble.com/Deleting-all-queues-in-rabbitmq-td30933.html
Saya membuat deleteRabbitMqQs.sh, yang menerima argumen untuk mencari daftar antrian, memilih hanya yang cocok dengan pola yang Anda inginkan. Jika Anda tidak menawarkan argumen, itu akan menghapus semuanya! Ini menunjukkan kepada Anda daftar antrian yang akan dihapus, membiarkan Anda berhenti sebelum melakukan sesuatu yang merusak.
for word in "$@"
do
args=true
newQueues=$(rabbitmqctl list_queues name | grep "$word")
queues="$queues
$newQueues"
done
if [ $# -eq 0 ]; then
queues=$(rabbitmqctl list_queues name | grep -v "\.\.\.")
fi
queues=$(echo "$queues" | sed '/^[[:space:]]*$/d')
if [ "x$queues" == "x" ]; then
echo "No queues to delete, giving up."
exit 0
fi
read -p "Deleting the following queues:
${queues}
[CTRL+C quit | ENTER proceed]
"
while read -r line; do
rabbitmqadmin delete queue name="$line"
done <<< "$queues"
Jika Anda ingin pencocokan yang berbeda dengan argumen yang Anda berikan, Anda dapat mengubah grep di baris empat. Ketika menghapus semua antrian, itu tidak akan menghapus yang dengan tiga spasi berturut-turut di dalamnya, karena saya pikir kemungkinan akan lebih jarang daripada orang-orang yang rabbitmqctl mencetak hasilnya dalam bahasa yang berbeda.
Nikmati!
Di Rabbit versi 3.7.10 Anda dapat menjalankan perintah di bawah ini dengan izin root:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
Ini cara untuk melakukannya dengan PowerShell. URL mungkin perlu diperbarui
$cred = Get-Credential
iwr -ContentType 'application/json' -Method Get -Credential $cred 'http://localhost:15672/api/queues' | % {
ConvertFrom-Json $_.Content } | % { $_ } | ? { $_.messages -gt 0} | % {
iwr -method DELETE -Credential $cred -uri $("http://localhost:15672/api/queues/{0}/{1}" -f [System.Web.HttpUtility]::UrlEncode($_.vhost), $_.name)
}
Anda dapat menggunakan eval rabbitmqctl seperti di bawah ini:
rabbitmqctl eval 'IfUnused = false, IfEmpty = true, MatchRegex =
<<"^prefix-">>, [rabbit_amqqueue:delete(Q, IfUnused, IfEmpty) || Q <-
rabbit_amqqueue:list(), re:run(element(4, element(2, Q)), MatchRegex)
=/= nomatch ].'
Di atas akan menghapus semua antrian kosong di semua vhosts yang memiliki nama yang diawali dengan "awalan-". Anda dapat mengedit variabel IfUnused, IfEmpty, dan MatchRegex sesuai kebutuhan Anda.
rabbitmqadmin
tidak dapat diakses.
Jika Anda hanya ingin membersihkan antrian yang tidak kosong (jauh lebih cepat):
rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
Bagi saya, dibutuhkan 2-3 detik untuk membersihkan antrian (baik yang kosong maupun yang tidak kosong), jadi iterasi melalui 50 antrian adalah hal yang menyakitkan, sementara saya hanya perlu membersihkan 10 dari antrian (40/50 kosong).
Saya mencoba rabbitmqctl dan mengatur ulang perintah tetapi sangat lambat.
Ini adalah cara tercepat yang saya temukan (ganti nama pengguna dan kata sandi Anda):
#!/bin/bash
# Stop on error
set -eo pipefail
USER='guest'
PASSWORD='guest'
curl -sSL -u $USER:$PASSWORD http://localhost:15672/api/queues/%2f/ | jq '.[].name' | sed 's/"//g' | xargs -L 1 -I@ curl -XDELETE -sSL -u $USER:$PASSWORD http://localhost:15672/api/queues/%2f/@
# To also delete exchanges uncomment next line
# curl -sSL -u $USER:$PASSWORD http://localhost:15672/api/exchanges/%2f/ | jq '.[].name' | sed 's/"//g' | xargs -L 1 -I@ curl -XDELETE -sSL -u $USER:$PASSWORD http://localhost:15672/api/exchanges/%2f/@
Catatan: Ini hanya berfungsi dengan vhost default /
Untuk membuat daftar antrian,
./rabbitmqadmin -f tsv -q list queues
Untuk menghapus antrian,
./rabbitmqadmin delete queue name=name_of_queue
Ini adalah versi yang lebih cepat (menggunakan parallel
install sudo apt-get install parallel) memperluas jawaban yang sangat baik oleh @admenva
parallel -j 50 rabbitmqadmin -H YOUR_HOST_OR_LOCALHOST -q delete queue name={} ::: $(rabbitmqadmin -H YOUR_HOST_OR_LOCALHOST -f tsv -q list queues name)
Perintah ini menghapus semua antrian Anda
python rabbitmqadmin.py \
-H YOURHOST -u guest -p guest -f bash list queues | \
xargs -n1 | \
xargs -I{} \
python rabbitmqadmin.py -H YOURHOST -u guest -p guest delete queue name={}
Skrip ini sangat sederhana karena digunakan -f bash
, yang menampilkan antrian sebagai daftar.
Kemudian kita gunakan xargs -n1
untuk membaginya menjadi beberapa variabel
Kemudian kita gunakan xargs -I{}
yang akan menjalankan perintah berikut, dan ganti {}
di perintah.
http://yourhost:15672/cli/
dan mengunduhnya.
Anda tidak perlu mereset server rabbitmq untuk menghapus antrian yang tidak tahan lama . Cukup hentikan server dan mulai lagi dan itu akan menghapus semua antrian tidak tahan lama yang tersedia.
Untuk yang memiliki masalah dengan menginstal rabbitmqadmin, Anda harus menginstal python terlebih dahulu.
Pengguna sistem operasi mirip UNIX perlu menyalin rabbitmqadmin ke direktori di PATH, mis. / Usr / local / bin.
Pengguna Windows perlu memastikan Python ada di PATH mereka, dan memanggil rabbitmqadmin sebagai python.exe rabbitmqadmin.
Kemudian
http://{hostname}:15672/cli/rabbitmqadmin
untuk mengunduh.Untuk daftar Antrian
python rabbitmqadmin list queues
.
Untuk menghapus Antrian
python rabbitmqadmin delete queue name=Name_of_queue
Untuk Menghapus semua Antrian
1- Menyatakan Kebijakan
python rabbitmqadmin declare policy name='expire_all_policies' pattern=.* definition={\"expires\":1} apply-to=queues
2- Hapus kebijakan
python rabbitmqadmin delete policy name='expire_all_policies'
Ada cara untuk menghapus semua antrian dan pertukaran tanpa skrip dan set lengkap. Anda bisa menghapus dan membuat kembali host virtual dari antarmuka admin. Ini akan berfungsi bahkan untuk vhost /
.
Satu-satunya hal yang perlu Anda pulihkan adalah izin untuk vhost yang baru dibuat.
Oke, kualifikasi penting untuk jawaban ini: Pertanyaannya tidak meminta untuk menggunakan rabbitmqctl ATAU rabbitmqadmin untuk menyelesaikan ini, jawaban saya perlu menggunakan keduanya. Juga, perhatikan bahwa ini diuji pada MacOS 10.12.6 dan versi rabbitmqctl dan rabbitmqadmin yang diinstal ketika menginstal rabbitmq dengan Homebrew dan yang diidentifikasi brew list --versions
sebagai rabbitmq 3.7.0
rabbitmqctl list_queues -p <VIRTUAL_HOSTNAME> name | sed 1,2d | xargs -I qname rabbitmqadmin --vhost <VIRTUAL_HOSTNAME> delete queue name=qname
Pilihan lain adalah menghapus vhost yang terkait dengan antrian. Ini akan menghapus semua yang terkait dengan vhost, jadi berhati-hatilah, tetapi mudah dan cepat.
CATATAN: tim RabbitMQ memonitor para rabbitmq-users
mailing list dan hanya kadang-kadang menjawab pertanyaan pada StackOverflow.
Saya mencoba potongan-potongan kode di atas tetapi saya tidak melakukan streaming.
sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do sudo rabbitmqctl delete_queue "$line"; done
.
Saya menghasilkan file yang berisi semua nama antrian dan loop melalui baris demi baris untuk menghapusnya. Untuk loop, while read ...
tidak melakukannya untukku. Itu selalu berhenti di nama antrian pertama.
rabbitmqadmin list queues|awk 'NR>3{print $4}'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname
rabbitmqctl list_queues name messages messages_ready \ messages_unacknowledged