RabbitMQ'dan tüm kuyruklar silinsin mi?


188

rabbitmqadminTüm exchange'leri ve kuyrukları yükledim ve listeleyebildim. Tüm kuyrukları silmek için rabbitmqadminveya öğesini nasıl kullanabilirim rabbitmqctl.

Yanıtlar:


271

İ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

4
bekleyen tüm görevleri görmek için:rabbitmqctl list_queues name messages messages_ready \ messages_unacknowledged
Guillaume Vincent

2
"Rabbitmqctl reset" öğesinin her şeyi "fabrika ayarlarına" sıfırlayacağını unutmayın. Oluşturduğunuz tüm RabbitMQ kullanıcıları, sanal konaklar, vb.
thoufek

Özür dilerim smartnut007, cevabın ikinci kısmını bir feragatname ile açıkladım.
lukiffer

24
sadece boş kuyrukları kapmak. rabbitmqctl list_queues | grep 0 | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn
au_stan

4
@au_stan Adında veya sayısında 0 olan tüm kuyrukları siler. Yapmak isteyebilir grep $'\t0'falan.
woot

51

İle rabbitmqadminbu tek astarla bunları kaldırabilirsiniz:

rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done

Benim durumumda sıraları ben sadece kullanabilirsiniz anahtar kelime ile önek 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
Logans

48

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

    • Sanal Ana Bilgisayar: Seç
    • Ad: Tüm Politikaların Sona Ermesi (Daha Sonra Sil)
    • Desen:. *
    • Uygula: Kuyruklar
    • Tanım: değer 1 ile sona erer (türü Dize yerine Sayı olarak değiştirir)
  • Kayıt etmek

  • Checkout Kuyrukları sekmesi tekrar
  • Tüm Kuyruklar silinmelidir
  • Ve politikayı kaldırmayı unutma !!!!!! .

1
Tanım'da "Sayı" yı seçin. Varsayılan ("String") ile çalışmaz
Mathias

Harika cevap, aslında benim günümü uydurdu. Listeden "Borsalar ve Kuyruklar" ı seçerseniz, hem Kuyrukları hem de Borsaları kolayca silebilirsiniz. Keşke bu kabul edilen cevap olabilir.
Wiktor Zychla

SSH örneği etrafında oynamaya gerek kalmadan çok temiz bir çözüm.
acidburn23

Yazık kimse yönetim eklentisi ve politikaları yüklemek için nasıl açıklar
gelonida

@MesutA. Çok teşekkürler. Bu makalede bu bağlantıya sahip olmanın iyi olduğunu düşünüyorum. Yorumlar tasfiye edilebileceğinden cevaba eklemek daha da iyi olabilir. Ama şimdi en azından bu bilgiye
sahibim

19

Bunu dene:

 rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn

2
Bu benim için çalıştı, ama aynı zamanda *** 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=qnDüzeltmek için emri değiştirdim .
Mark Edington

rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
Scott Leonard

9

Rabbitmqadmin yüklü değilse, kuyrukları rabbitmqctl ile temizlemeye çalışın:

rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue


İçinde delete_queuene purge_queuekomut 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
istemiyorum

rabbitmqctl purge_queueburada elle çalıştı. Sadece -p <virtual-host>
Roman Susi

@Rolice Yukarıda belirtildiği, hem aksine delete_queueve purge_queuemevcuttur rabbitmqctlve sadece başarıyla tükendi. Belki eski bir versiyondasın.
Richard Dunn

Bunu duymak güzel, bunlar yakın zamanda eklenmiş olabilir.
Rolice

7

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


6

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!


6

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

5

İş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)
 }

Bunun yalnızca boş olmayan kuyrukları sildiğini unutmayın. Tüm kuyrukları silmek için -gt yan tümcesini kaldırın
Peter Goodman

4

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.


Erişilemediği zamanlar için mükemmeldir rabbitmqadmin.
NuSkooler

Bunu list_queues'dan çok daha hızlı buldum
TerrenceSun

3

Rabbitmqctl bir astar kullanarak tüm kuyrukları kaldırma

rabbitmqctl list_queues | awk '{ print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue

2

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ş).


2

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 /


2

Sıraları listelemek için,

./rabbitmqadmin -f tsv -q list queues

Bir kuyruğu silmek için,

./rabbitmqadmin delete queue name=name_of_queue

1

İş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)


1

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 bashsıraları bir liste olarak çıkaran kullandığı için çok basittir .

Sonra bunu xargs -n1birden ç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 {}.


Ben 10 farklı cevap gibi denedim ve bu aslında diğer tüm ayarları öldürmeden kuyrukları silmek için çalıştı SADECE şeydir. Teşekkürler! Rabbitmqctl'ın sadece "tüm kuyrukları bırak" komutu olmadığına inanamıyorum.
sudo

BTW, rabbitmqadmin almak için gitmeli http://yourhost:15672/cli/ve indirmelisin.
sudo

1

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 .


dayanıklı kuyruklar dahil? Ben öyle düşünmüyorum. Cevabınızı kabul edeceğim.
Hendy Irawan

Hayır, kalıcı kuyruklar sunucuyu durdurarak silinemez. Kuyruklar altında RabbitMQ Management web arayüzünden silinebilirler.
ErAcube

Aslında evet, bu bana yardımcı oldu ve yaklaşık 4500 otomatik olarak oluşturulan tüm kuyruklar gitti. Görünüşe göre bunlar dayanıklı olmayanlardır. Teşekkürler!
18'de Rol

1

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

  1. http://{hostname}:15672/cli/rabbitmqadminİndirmek için göz atın .
  2. İçeren klasöre gidin ve cmd'yi yönetici ayrıcalığı ile çalıştırı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'

0

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.


0

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


0

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.


0

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.


-1
rabbitmqadmin list queues|awk 'NR>3{print $4}'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname

1
Bunu çalıştırırken alıyorum: kafa: yasadışı hat sayısı - -1
Robert Ross

"Head -n-1", "head -1" veya "head -n 1" olmalıdır
Gerd Busker
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.