Yanıtlar:
İlk olarak, sıralarınızı listeleyin:
rabbitmqadmin list queues name
Ardından listeden bunları tek tek manuel olarak silmeniz gerekir:
rabbitmqadmin delete queue name='queuename'
Çıktı biçimi nedeniyle görünmüyor yanıtı grep olabilir list queues
. Alternatif olarak, yalnızca her şeyi temizlemenin bir yolunu arıyorsanız (okuyun: tüm ayarları sıfırlayın , kurulumu varsayılan bir duruma döndürün), şunu kullanın:
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'
falan.
İle rabbitmqadmin
bu tek astarla bunları kaldırabilirsiniz:
rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
egrep
, bu yüzden benim komut şöyle görünecektir:rabbitmqadmin -f tsv -q list queues name | egrep "%search word%" | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
Aslında yönetim eklentisi ve politikaları ile süper kolay :
Git Yönetim Konsolu (localhost: 15672)
Yönetici sekmesine git
Politikalar sekmesine git (sağ tarafta)
Politika Ekle
Alanları Doldur
Kayıt etmek
Bunu dene:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
*** Not found: /api/queues/%2F/name
çıktı bir "isim" sütununa sahip bir ASCII tablo olduğu için gösterdi . rabbitmqadmin list queues name | awk '!/--|name/ {print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
Düzeltmek için emri değiştirdim .
rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
Rabbitmqadmin yüklü değilse, kuyrukları rabbitmqctl ile temizlemeye çalışın:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
delete_queue
ne purge_queue
komut var ne de rabbitmqctl
. Otomatik olarak oluşturulmuş gibi görünen birçok kuyruğu temizlemek istiyorum ve şu gibi ekstra yazılım yüklemek rabbitmqadmin
rabbitmqctl purge_queue
burada elle çalıştı. Sadece -p <virtual-host>
delete_queue
ve purge_queue
mevcuttur rabbitmqctl
ve sadece başarıyla tükendi. Belki eski bir versiyondasın.
Kullanılmadığı ve sıraları sıfırlamak istemediğiniz için kuyrukları silmeye çalışıyorsanız, seçeneklerden biri TTL kuyruğunu bir politika aracılığıyla çok düşük olarak ayarlamaktır, TTL geçtiğinde kuyrukların otomatik olarak silinmesini bekleyin ve ardından politikayı kaldırın ( https://www.rabbitmq.com/ttl.html ).
rabbitmqctl.bat set_policy delq ".*" '{"expires": 1}' --apply-to queues
Politikayı kaldırmak için
rabbitmqctl clear_policy delq
Bunun yalnızca kullanılmayan kuyruklar için çalıştığını unutmayın
Orijinal bilgi burada: http://rabbitmq.1065348.n5.nabble.com/Deleting-all-queues-in-rabbitmq-td30933.html
Yalnızca istediğiniz desenle eşleşenleri seçerek, kuyruklar listesini aramak için bağımsız değişkenleri kabul eden bir deleteRabbitMqQs.sh dosyası oluşturdum. Eğer hiçbir argüman sunmazsanız, hepsini silecektir! Silmek üzere olan kuyrukların listesini gösterir, yıkıcı bir şey yapmadan önce bırakmanıza izin verir.
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"
İletdiğiniz bağımsız değişkenlerle farklı eşleşme istiyorsanız, dördüncü satırdaki grep'i değiştirebilirsiniz. Tüm kuyrukları silerken, içinde üç ardışık boşluk bulunanları silmez, çünkü olasılıkın çıktısını farklı dillerde basan rabbitmqctl olan insanlardan daha nadir olacağını düşündüm.
Zevk almak!
Tavşan 3.7.10 sürümünde aşağıdaki izni root izniyle çalıştırabilirsiniz:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
İşte bunu PowerShell ile yapmanın bir yolu. URL'nin güncellenmesi gerekebilir
$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)
}
Rabbitmqctl eval aşağıdaki gibi kullanabilirsiniz:
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 ].'
Yukarıdakiler, "önek-" ile başlayan bir adı olan tüm hayaletlerdeki tüm boş kuyrukları silecektir. İhtiyaçlarınıza göre IfUnused, IfEmpty ve MatchRegex değişkenlerini düzenleyebilirsiniz.
rabbitmqadmin
.
Yalnızca boş olmayan kuyrukları temizlemek istiyorsanız (çok daha hızlı):
rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
Benim için, bir kuyruğu (hem boş hem de boş olmayanları) temizlemek 2-3 saniye sürer, bu yüzden 50 kuyruğu tekrarlamak böyle bir acıdır, sadece 10 tanesini temizlemem gerekiyor (40/50 boş).
Rabbitmqctl denedim ve komutları sıfırladım ama çok yavaşlar.
Bulduğum en hızlı yol (kullanıcı adınızı ve şifrenizi değiştirin):
#!/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/@
Not: Bu yalnızca varsayılan vhost /
Sıraları listelemek için,
./rabbitmqadmin -f tsv -q list queues
Bir kuyruğu silmek için,
./rabbitmqadmin delete queue name=name_of_queue
İşte parallel
@admenva'nın mükemmel cevabına genişleyen daha hızlı bir versiyon ( install sudo apt-get install paralel kullanarak)
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)
Bu komutlar tüm kuyruklarınızı siler
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={}
Bu komut dosyası, -f bash
sıraları bir liste olarak çıkaran kullandığı için çok basittir .
Sonra bunu xargs -n1
birden çok değişkene bölmek için kullanırız
Sonra bunu xargs -I{}
aşağıdaki komutu çalıştıracak ve komutta değiştireceğiz {}
.
http://yourhost:15672/cli/
ve indirmelisin.
Dayanıklı olmayan kuyrukları silmek için rabbitmq sunucusunu sıfırlamanız gerekmez . Sadece sunucuyu durdurun ve tekrar başlayın ve mevcut tüm dayanıklı olmayan kuyrukları kaldıracaktır .
Kim için rabbitmqadmin yükleme ile ilgili bir sorun var, öncelikle python yüklemelisiniz.
UNIX benzeri işletim sistemi kullanıcılarının rabbitmqadmin'i PATH içindeki bir dizine, örneğin / usr / local / bin'e kopyalaması gerekir.
Windows kullanıcılarının Python'larının PATH'larında olduğundan emin olmaları ve rabbitmqadmin'i python.exe rabbitmqadmin olarak çağırmaları gerekir.
Sonra
http://{hostname}:15672/cli/rabbitmqadmin
İndirmek için göz atın .Sıraları listelemek için
python rabbitmqadmin list queues
.
Kuyruğu silmek için
python rabbitmqadmin delete queue name=Name_of_queue
Tüm Kuyrukları Silmek için
1- Beyan Politikası
python rabbitmqadmin declare policy name='expire_all_policies' pattern=.* definition={\"expires\":1} apply-to=queues
2- Politikayı kaldırın
python rabbitmqadmin delete policy name='expire_all_policies'
Komut dosyaları ve tam sıfırlama olmadan tüm kuyrukları ve exchange'leri kaldırmanın bir yolu vardır. Yönetici arayüzünden sanal bir ana bilgisayarı silebilir ve yeniden oluşturabilirsiniz. Bu hayalet için bile işe yarayacak /
.
Geri yüklemeniz gereken tek şey, yeni oluşturulan vhost için izinlerdir.
Tamam, bu cevap için önemli niteleyici: Soru, bunu çözmek için rabbitmqctl VEYA rabbitmqadmin kullanmayı ister , cevabımın her ikisini de kullanması gerekiyordu. Ayrıca, bunun MacOS 10.12.6'da ve hommrew ile rabbitmq yüklerken kurulan ve rabbitmq 3.7.0brew list --versions
olarak tanımlanan rabbitmqctl ve rabbitmqadmin sürümlerinde test edildiğine dikkat edin.
rabbitmqctl list_queues -p <VIRTUAL_HOSTNAME> name | sed 1,2d | xargs -I qname rabbitmqadmin --vhost <VIRTUAL_HOSTNAME> delete queue name=qname
Başka bir seçenek, kuyruklarla ilişkili vhost'u silmektir. Bu , hayaletle ilişkili her şeyi silecektir , bu yüzden uyarılmalıdır, ancak kolay ve hızlıdır.
NOT: RabbitMQ ekibi posta listesini izler verabbitmq-users
StackOverflow ile ilgili soruları yalnızca bazen cevaplar.
Yukarıdaki kod parçalarını denedim ama herhangi bir akış yapmadım.
sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do sudo rabbitmqctl delete_queue "$line"; done
.
Tüm kuyruk adlarını içeren bir dosya oluşturur ve bunları silmek için satır satır döngüler. Döngüler while read ...
için, benim için yapmadı. Her zaman ilk kuyruk adında duruyordu.
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