सभी कतारें RabbitMQ से हटाएं?


188

मैंने स्थापित किया rabbitmqadminऔर सभी एक्सचेंजों और कतारों को सूचीबद्ध करने में सक्षम था। मैं सभी कतारों का उपयोग rabbitmqadminया rabbitmqctlहटाने के लिए कैसे कर सकता हूं ।

जवाबों:


272

सबसे पहले, अपनी कतारों को सूचीबद्ध करें:

rabbitmqadmin list queues name

फिर सूची से, आपको मैन्युअल रूप से उन्हें एक-एक करके हटाना होगा:

rabbitmqadmin delete queue name='queuename'

आउटपुट स्वरूप के कारण, ऐसा प्रतीत नहीं होता है कि आप इससे प्रतिक्रिया प्राप्त कर सकते हैं list queues। वैकल्पिक रूप से, यदि आप सब कुछ साफ़ करने का तरीका ढूंढ रहे हैं (पढ़ें: सभी सेटिंग्स रीसेट करें , इंस्टॉलेशन को डिफ़ॉल्ट स्थिति में लौटाएं), उपयोग करें:

rabbitmqctl stop_app
rabbitmqctl reset    # Be sure you really want to do this!
rabbitmqctl start_app

4
rabbitmq में सभी लंबित कार्यों को देखने के लिए:rabbitmqctl list_queues name messages messages_ready \ messages_unacknowledged
Guillaume Vincent

2
ज्ञात हो कि "rabbitmqctl reset" सब कुछ वापस "फ़ैक्टरी सेटिंग्स" पर रीसेट कर देगा । कोई भी RabbitMQ उपयोगकर्ता, वर्चुअल होस्ट, आदि, जिसे आपने बनाया है, उड़ा दिया जाएगा।
तूफ़ेक

क्षमायाचना @ smartnut007, मैंने उत्तर के दूसरे भाग को एक अस्वीकरण के साथ स्पष्ट किया है।
lukiffer

24
बस खाली कतारों को पकड़ना। rabbitmqctl list_queues | grep 0 | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn
au_stan

4
@au_stan जो कि नाम या गिनती में 0 के साथ सभी कतारों को हटा देगा। grep $'\t0'कुछ करने की इच्छा हो सकती है।
woot

51

साथ rabbitmqadminआप उन्हें इस एक लाइनर के साथ निकाल सकते हैं:

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

मेरे मामले में कतारें कीवर्ड के साथ उपसर्ग कर रही हैं जिसके द्वारा मैं बस उपयोग कर सकता हूं egrep, इसलिए मेरी कमांड इस तरह दिखाई देगी:rabbitmqadmin -f tsv -q list queues name | egrep "%search word%" | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
लोगन्स

47

वास्तव में प्रबंधन प्लगइन और नीतियों के साथ सुपर आसान :

  • गोटो मैनेजमेंट कंसोल (लोकलहोस्ट: 15672)

  • गोटो एडमिन टैब

  • गोटो नीतियां टैब (दाईं ओर)

  • नीति जोड़ें

  • फ़ील्ड भरें

    • वर्चुअल होस्ट: चुनें
    • नाम: सभी नीतियाँ समाप्त करें (बाद में हटाएं)
    • पैटर्न: । *
    • इसके लिए लागू करें: कतार
    • परिभाषा: मान 1 के साथ समाप्त होता है (स्ट्रिंग से संख्या में परिवर्तन प्रकार)
  • सहेजें

  • चेकआउट कतार टैब फिर से
  • सभी कतार हटा दी जानी चाहिए
  • और नीति को मत भूलना !!!!!!

1
परिभाषा पर "संख्या" चुनें। डिफ़ॉल्ट ("स्ट्रिंग") के साथ काम नहीं करता है
मथियास

शानदार जवाब, वास्तव में मेरा दिन बना। यदि आप सूची से "एक्सचेंज और क्यू" चुनते हैं, तो आप आसानी से क्यू और एक्सचेंज दोनों को हटा सकते हैं। काश यह स्वीकृत उत्तर हो सकता है।
विकटोर ज़िकला

उदाहरण के आसपास SSH खेलने की आवश्यकता के बिना बहुत साफ समाधान।
एसिडबर्न 23

दया कोई नहीं बताता कि प्रबंधन प्लगइन और नीतियों को कैसे स्थापित किया जाए
जेलोनिडा

@MesutA। बहुत बहुत धन्यवाद। मुझे लगता है कि इस लेख में यह लिंक होना अच्छा है। इसे उत्तर में जोड़ना और भी बेहतर हो सकता है, क्योंकि टिप्पणियाँ शुद्ध हो सकती हैं। लेकिन मेरे पास अब कम से कम यह जानकारी है
गेलोनीडा

19

इसे इस्तेमाल करे:

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

2
यह मेरे लिए काम करता है, लेकिन यह भी दिखाया गया है *** Not found: /api/queues/%2F/nameक्योंकि आउटपुट "नाम" कॉलम के साथ एक ASCII तालिका है। मैंने rabbitmqadmin list queues name | awk '!/--|name/ {print $2}' | xargs -I qn rabbitmqadmin delete queue name=qnइसे ठीक करने के लिए कमांड को ट्विक किया ।
मार्क एडिंगटन

rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
स्कॉट लियोनार्ड

9

यदि आपके पास rabbitmqadmin स्थापित नहीं है, तो rabbitmqctl के साथ कतारों को शुद्ध करने का प्रयास करें:

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


कोई है delete_queueऔर न ही purge_queueआदेशों में rabbitmqctl। मैं बहुत सी कतारों को शुद्ध करना चाहूंगा जो स्वतः उत्पन्न होती हैं और मैं अतिरिक्त सॉफ़्टवेयर स्थापित करना पसंद नहीं rabbitmqadmin
करूंगा

rabbitmqctl purge_queueयहां मैन्युअल काम किया। मुझे केवल -p <virtual-host>
रोमन सूसी

क्या @Rolice ऊपर कहा गया है, दोनों के विपरीत delete_queueऔर purge_queueमें उपलब्ध हैं rabbitmqctlऔर मैं सिर्फ उन्हें सफलतापूर्वक चला गया है। शायद आप एक पुराने संस्करण पर हैं।
रिचर्ड डन

यह सुनकर अच्छा लगा, इन्हें हाल ही में जोड़ा जा सकता है।
Rolice

6

मैंने एक deleteRabbitMqQs.sh बनाया, जो केवल आपके द्वारा इच्छित पैटर्न से मेल खाते हुए चयनों के लिए कतारों की सूची खोजने के लिए तर्कों को स्वीकार करता है। यदि आप कोई तर्क नहीं देते हैं, तो यह उन सभी को हटा देगा! यह आपको नष्ट करने के बारे में कतारों की सूची दिखाता है, आपको कुछ भी विनाशकारी करने से पहले छोड़ देता है।

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"

यदि आप अपने द्वारा पास किए गए तर्कों के विरुद्ध भिन्न मिलान चाहते हैं, तो आप पंक्ति चार में grep को बदल सकते हैं। सभी कतारों को हटाते समय, यह उन में से तीन लगातार रिक्त स्थान को नहीं हटाएगा, क्योंकि मुझे लगा कि उन लोगों की तुलना में दुर्लभता होगी, जिनके पास विभिन्न भाषाओं में इसके उत्पादन को मुद्रित करने वाले खरगोशबिटक्लेट हैं।

का आनंद लें!


6

यदि आप कतारों को हटाने की कोशिश कर रहे हैं क्योंकि वे अप्रयुक्त हैं और आप रीसेट नहीं करना चाहते हैं, तो एक विकल्प यह है कि एक नीति के माध्यम से कतार टीटीएल को बहुत कम सेट करें, टीटीएल पास होने के बाद कतारों को ऑटो-डिलीट होने की प्रतीक्षा करें और फिर पॉलिसी ( https://www.rabbitmq.com/ttl.html ) को हटा दें ।

rabbitmqctl.bat set_policy delq ".*" '{"expires": 1}' --apply-to queues

पॉलिसी को हटाने के लिए

rabbitmqctl clear_policy delq

ध्यान दें कि यह केवल अप्रयुक्त कतारों के लिए काम करता है

मूल जानकारी यहां: http://rabbitmq.1065348.n5.nabble.com/Deleting-all-queues-in-rabbitmq-td30933.html


6

खरगोश संस्करण में 3.7.10 आप रूट अनुमति के साथ कमांड से नीचे चला सकते हैं:

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

5

यहाँ यह PowerShell के साथ करने का एक तरीका है। URL को अद्यतन करने की आवश्यकता हो सकती है

$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)
 }

ध्यान दें, यह केवल गैर-रिक्त कतारों को हटाता है। सभी कतारों को हटाने के लिए -gt क्लॉज निकालें
पीटर गुडमैन

4

आप नीचे के रूप में rabbitmqctl eval का उपयोग कर सकते हैं:

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 ].' 

उपरोक्त सभी रिक्त स्थानों को उन सभी vhosts में हटा देगा जिनका नाम "उपसर्ग" के साथ शुरू हुआ है। आप अपनी आवश्यकता के अनुसार, IfUnused, IfEmpty और MatchRegex चर को संपादित कर सकते हैं।


जब rabbitmqadminपहुंच योग्य नहीं है, के लिए बिल्कुल सही ।
नुस्कूलर

मैं इस बहुत तेजी से list_queues से पाया
TerrenceSun

3

एक लाइनर rabbitmqctl का उपयोग करके सभी कतारों को हटाना

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

2

यदि आप केवल उन कतारों को शुद्ध करना चाहते हैं जो खाली नहीं हैं (बहुत तेज):

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

मेरे लिए, एक कतार (दोनों खाली और गैर-रिक्त दोनों) को शुद्ध करने में 2-3 सेकंड लगते हैं, इसलिए 50 कतारों के माध्यम से पुनरावृत्ति करना एक ऐसा दर्द है, जबकि मुझे उनमें से 10 को शुद्ध करने की आवश्यकता है (40/50 खाली हैं)।


2

मैंने rabbitmqctl की कोशिश की और कमांड को रीसेट किया, लेकिन वे बहुत धीमे हैं।

यह सबसे तेज़ तरीका है जो मैंने पाया (अपने उपयोगकर्ता नाम और पासवर्ड को बदलें):

#!/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/@

नोट: यह केवल डिफ़ॉल्ट vhost के साथ काम करता है /



1

यहां parallel@admenva द्वारा उत्कृष्ट उत्तर पर विस्तार करते हुए एक तेज़ संस्करण ( इंस्टॉल किए गए sudo apt-get install समानांतर) का उपयोग किया गया है

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

यह आदेश आपके सभी कतारों को हटा देता है

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={}

यह स्क्रिप्ट सुपर सरल है क्योंकि यह उपयोग करता है -f bash, जो सूची के रूप में कतारों को आउटपुट करता है ।

फिर हम xargs -n1इसे कई वेरिएबल्स में विभाजित करने के लिए उपयोग करते हैं

फिर हम xargs -I{}उस कमांड का उपयोग करेंगे जो कमांड को चलाएगा, और {}कमांड में बदल देगा ।


मैंने 10 अलग-अलग उत्तरों की तरह कोशिश की है, और यह केवल एक चीज है जिसने वास्तव में मेरी सभी अन्य सेटिंग्स को मारने के बिना कतारों को हटाने का काम किया है। धन्यवाद! मुझे विश्वास नहीं हो सकता है कि rabbitmqctl के पास "सभी कतारें छोड़ें" कमांड नहीं है।
sudo

BTW, rabbitmqadmin प्राप्त करने के लिए, आपको http://yourhost:15672/cli/इसे डाउनलोड करने और जाने की आवश्यकता है।
सूदो

1

गैर-टिकाऊ कतारों को हटाने के लिए आपको खरगोशबिट सर्वर को रीसेट करने की आवश्यकता नहीं है । बस सर्वर को बंद करें और फिर से शुरू करें और यह उपलब्ध सभी गैर-टिकाऊ कतारों को हटा देगा ।


टिकाऊ कतारों सहित? मुझे ऐसा नहीं लगता। मैं आपके उत्तर को प्राप्त करूंगा।
हेंडी इरावन

नहीं, सर्वर को रोककर टिकाऊ कतारें नहीं हटाई जा सकतीं। उन्हें RabbitMQ प्रबंधन वेब इंटरफ़ेस से कतारों के अंतर्गत हटाया जा सकता है।
एरक्यूब

वास्तव में हां, इससे मुझे मदद मिली और लगभग 4500 स्वतः उत्पन्न कतारें समाप्त हो गईं। ऐसा लगता है कि ये गैर-टिकाऊ थे। धन्यवाद!
Rolice

1

जिनके लिए rabbitmqadmin स्थापित करने में समस्या है, आपको सबसे पहले अजगर को स्थापित करना चाहिए।

UNIX- जैसे ऑपरेटिंग सिस्टम उपयोगकर्ताओं को PATH, जैसे / usr / लोकल / बिन में एक निर्देशिका में rabbitmqadmin को कॉपी करने की आवश्यकता होती है।

विंडोज उपयोगकर्ताओं को यह सुनिश्चित करने की आवश्यकता होगी कि पायथन अपने पैट पर है, और खरगोश को python.exe rabbitmqadmin के रूप में आमंत्रित करें।

फिर

  1. http://{hostname}:15672/cli/rabbitmqadminडाउनलोड करने के लिए ब्राउज़ करें ।
  2. युक्त फ़ोल्डर पर जाएं, फिर व्यवस्थापक विशेषाधिकार के साथ cmd चलाएं

कतारों को सूचीबद्ध करने के लिए python rabbitmqadmin list queues

कतार हटाने के लिए python rabbitmqadmin delete queue name=Name_of_queue

सभी कतारों को हटाने के लिए

१- घोषणा नीति

python rabbitmqadmin declare policy name='expire_all_policies' pattern=.* definition={\"expires\":1} apply-to=queues

2- पॉलिसी को हटा दें

python rabbitmqadmin  delete policy name='expire_all_policies'

0

स्क्रिप्ट और पूर्ण रीसेट के बिना सभी कतारों और एक्सचेंजों को हटाने का एक तरीका है। आप बस हटा सकते हैं और व्यवस्थापक इंटरफ़ेस से एक वर्चुअल होस्ट बना सकते हैं। यह vhost के लिए भी काम करेगा /

केवल एक चीज जिसे आपको पुनर्स्थापित करने की आवश्यकता होगी, वह नए बनाए गए vhost के लिए अनुमतियाँ हैं।


0

ठीक है, इस उत्तर के लिए महत्वपूर्ण क्वालीफायर: प्रश्न यह हल करने के लिए या तो खरगोशबिटक्क्टल या खरगोशबिटकमिन का उपयोग करने के लिए कहता है, मेरे जवाब को दोनों का उपयोग करने की आवश्यकता है। इसके अलावा, ध्यान दें कि यह MacOS 10.12.6 पर परीक्षण किया गया था और के संस्करणों rabbitmqctl और rabbitmqadmin कि जब Homebrew साथ RabbitMQ स्थापित करने स्थापित किया है और जो कर रहे हैं के साथ की पहचान की है brew list --versionsके रूप में 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


0

एक अन्य विकल्प कतारों से जुड़े vhost को हटाना है। यह vhost से जुड़ी हर चीज को डिलीट कर देगा , इसलिए चेतावनी दी जाए, लेकिन यह आसान और तेज है।


नोट: RabbitMQ टीम मेलिंग सूची की निगरानी करती हैrabbitmq-users और केवल कभी-कभी StackOverflow पर सवालों के जवाब देती है।


0

मैंने कोड के उपरोक्त टुकड़ों की कोशिश की लेकिन मैंने कोई स्ट्रीमिंग नहीं की।

sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do sudo rabbitmqctl delete_queue "$line"; done

मैं एक फाइल बनाता हूं जिसमें सभी कतार के नाम हैं और उन्हें हटाने के लिए लाइन से लाइन के माध्यम से छोरों। छोरों के लिए, while read ...यह मेरे लिए नहीं किया। यह हमेशा पहली कतार के नाम पर रुकता था।


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

1
मैं इसे चलाते समय इसे प्राप्त करता हूं: सिर: अवैध रेखा गणना - -1
रॉबर्ट रॉस

"हेड-एन -1" या तो "हेड -1" या "हेड एन एन 1" होना चाहिए
गर्ड बुस्कर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.