जवाबों:
सबसे पहले, अपनी कतारों को सूचीबद्ध करें:
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
rabbitmqctl list_queues | grep 0 | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn
grep $'\t0'
कुछ करने की इच्छा हो सकती है।
साथ 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
वास्तव में प्रबंधन प्लगइन और नीतियों के साथ सुपर आसान :
गोटो मैनेजमेंट कंसोल (लोकलहोस्ट: 15672)
गोटो एडमिन टैब
गोटो नीतियां टैब (दाईं ओर)
नीति जोड़ें
फ़ील्ड भरें
सहेजें
इसे इस्तेमाल करे:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
*** 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
यदि आपके पास 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>
delete_queue
और purge_queue
में उपलब्ध हैं rabbitmqctl
और मैं सिर्फ उन्हें सफलतापूर्वक चला गया है। शायद आप एक पुराने संस्करण पर हैं।
मैंने एक 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 को बदल सकते हैं। सभी कतारों को हटाते समय, यह उन में से तीन लगातार रिक्त स्थान को नहीं हटाएगा, क्योंकि मुझे लगा कि उन लोगों की तुलना में दुर्लभता होगी, जिनके पास विभिन्न भाषाओं में इसके उत्पादन को मुद्रित करने वाले खरगोशबिटक्लेट हैं।
का आनंद लें!
यदि आप कतारों को हटाने की कोशिश कर रहे हैं क्योंकि वे अप्रयुक्त हैं और आप रीसेट नहीं करना चाहते हैं, तो एक विकल्प यह है कि एक नीति के माध्यम से कतार टीटीएल को बहुत कम सेट करें, टीटीएल पास होने के बाद कतारों को ऑटो-डिलीट होने की प्रतीक्षा करें और फिर पॉलिसी ( 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
खरगोश संस्करण में 3.7.10 आप रूट अनुमति के साथ कमांड से नीचे चला सकते हैं:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
यहाँ यह 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)
}
आप नीचे के रूप में 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
पहुंच योग्य नहीं है, के लिए बिल्कुल सही ।
यदि आप केवल उन कतारों को शुद्ध करना चाहते हैं जो खाली नहीं हैं (बहुत तेज):
rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
मेरे लिए, एक कतार (दोनों खाली और गैर-रिक्त दोनों) को शुद्ध करने में 2-3 सेकंड लगते हैं, इसलिए 50 कतारों के माध्यम से पुनरावृत्ति करना एक ऐसा दर्द है, जबकि मुझे उनमें से 10 को शुद्ध करने की आवश्यकता है (40/50 खाली हैं)।
मैंने 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 के साथ काम करता है /
कतारों को सूचीबद्ध करने के लिए,
./rabbitmqadmin -f tsv -q list queues
एक कतार हटाने के लिए,
./rabbitmqadmin delete queue name=name_of_queue
यहां 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)
यह आदेश आपके सभी कतारों को हटा देता है
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{}
उस कमांड का उपयोग करेंगे जो कमांड को चलाएगा, और {}
कमांड में बदल देगा ।
http://yourhost:15672/cli/
इसे डाउनलोड करने और जाने की आवश्यकता है।
गैर-टिकाऊ कतारों को हटाने के लिए आपको खरगोशबिट सर्वर को रीसेट करने की आवश्यकता नहीं है । बस सर्वर को बंद करें और फिर से शुरू करें और यह उपलब्ध सभी गैर-टिकाऊ कतारों को हटा देगा ।
जिनके लिए rabbitmqadmin स्थापित करने में समस्या है, आपको सबसे पहले अजगर को स्थापित करना चाहिए।
UNIX- जैसे ऑपरेटिंग सिस्टम उपयोगकर्ताओं को PATH, जैसे / usr / लोकल / बिन में एक निर्देशिका में rabbitmqadmin को कॉपी करने की आवश्यकता होती है।
विंडोज उपयोगकर्ताओं को यह सुनिश्चित करने की आवश्यकता होगी कि पायथन अपने पैट पर है, और खरगोश को python.exe rabbitmqadmin के रूप में आमंत्रित करें।
फिर
http://{hostname}:15672/cli/rabbitmqadmin
डाउनलोड करने के लिए ब्राउज़ करें ।कतारों को सूचीबद्ध करने के लिए
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'
स्क्रिप्ट और पूर्ण रीसेट के बिना सभी कतारों और एक्सचेंजों को हटाने का एक तरीका है। आप बस हटा सकते हैं और व्यवस्थापक इंटरफ़ेस से एक वर्चुअल होस्ट बना सकते हैं। यह vhost के लिए भी काम करेगा /
।
केवल एक चीज जिसे आपको पुनर्स्थापित करने की आवश्यकता होगी, वह नए बनाए गए vhost के लिए अनुमतियाँ हैं।
ठीक है, इस उत्तर के लिए महत्वपूर्ण क्वालीफायर: प्रश्न यह हल करने के लिए या तो खरगोशबिटक्क्टल या खरगोशबिटकमिन का उपयोग करने के लिए कहता है, मेरे जवाब को दोनों का उपयोग करने की आवश्यकता है। इसके अलावा, ध्यान दें कि यह 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
एक अन्य विकल्प कतारों से जुड़े vhost को हटाना है। यह vhost से जुड़ी हर चीज को डिलीट कर देगा , इसलिए चेतावनी दी जाए, लेकिन यह आसान और तेज है।
नोट: RabbitMQ टीम मेलिंग सूची की निगरानी करती हैrabbitmq-users
और केवल कभी-कभी StackOverflow पर सवालों के जवाब देती है।
मैंने कोड के उपरोक्त टुकड़ों की कोशिश की लेकिन मैंने कोई स्ट्रीमिंग नहीं की।
sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do sudo rabbitmqctl delete_queue "$line"; done
।
मैं एक फाइल बनाता हूं जिसमें सभी कतार के नाम हैं और उन्हें हटाने के लिए लाइन से लाइन के माध्यम से छोरों। छोरों के लिए, while read ...
यह मेरे लिए नहीं किया। यह हमेशा पहली कतार के नाम पर रुकता था।
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