जवाबों:
यदि आप प्रबंधन डेटाबेस में डेटा के बारे में परवाह नहीं करते हैं; यानी users
, vhosts
, messages
आदि, और न तो के बारे में अन्य queues
है, तो आप कर सकते हैं reset
क्रम में निम्न कमांड चलाकर कमांडलाइन के माध्यम से:
चेतावनी: कतारों के अलावा, यह किसी भी को हटा देगा
users
औरvhosts
, आपने अपने RabbitMQ सर्वर पर कॉन्फ़िगर किया है; और किसी भी लगातार को हटा देगाmessages
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
RabbitMQ प्रलेखन का कहना है कि reset
आदेश:
एक RabbitMQ नोड को उसकी कुंवारी अवस्था में लौटाता है।
किसी भी क्लस्टर से नोड को हटा देता है, प्रबंधन डेटाबेस से सभी डेटा को हटाता है, जैसे कॉन्फ़िगर किए गए उपयोगकर्ता और vhosts, और सभी लगातार संदेशों को हटा देता है।
इसलिए इसका इस्तेमाल करने में सावधानी बरतें।
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(
'localhost'))
channel = connection.channel()
channel.queue_delete(queue='queue-name')
connection.close()
पिका पैकेज को निम्नानुसार स्थापित करें
$ sudo pip install pika==0.9.8
स्थापना पाइप और गिट-कोर पैकेज पर निर्भर करती है, आपको पहले उन्हें स्थापित करने की आवश्यकता हो सकती है।
उबंटू पर:
$ sudo apt-get install python-pip git-core
डेबियन पर:
$ sudo apt-get install python-setuptools git-core
$ sudo easy_install pip
Windows पर: easy_install को स्थापित करने के लिए, सेट विंडोज के लिए MS Windows इंस्टालर चलाएं
> easy_install pip
> pip install pika==0.9.8
RabbitMQ संस्करणों> 3.0 में, यदि आप rabbitmq_management प्लगइन सक्षम है, तो आप HTTP API का भी उपयोग कर सकते हैं। बस सामग्री-प्रकार को 'एप्लिकेशन / json' पर सेट करना और vhost और कतार नाम प्रदान करना सुनिश्चित करें:
IE एक vhost 'परीक्षण' और कतार नाम 'testqueue' के साथ कर्ल का उपयोग:
$ curl -i -u guest:guest -H "content-type:application/json" -XDELETE http://localhost:15672/api/queues/test/testqueue
HTTP/1.1 204 No Content
Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue)
Date: Tue, 16 Apr 2013 10:37:48 GMT
Content-Type: application/json
Content-Length: 0
administrator
अन्यथा वे API के कुछ हिस्सों का उपयोग नहीं कर सकते हैं।
$ curl -i -u 'user:pass' -H "content-type:application/json" -XDELETE 'http://localhost:15672/api/queues/vhostname/name.portal' HTTP/1.1 204 No Content Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact) Date: Wed, 30 Jul 2014 11:23:47 GMT Content-Type: application/json Content-Length: 0
हालांकि कतार अभी भी बनी हुई है :( - किसी भी विचार?
वहाँ rabbitmqadmin है जो कंसोल से काम करने के लिए अच्छा है।
यदि आप ssh / सर्वर में लॉग इन करते हैं जहां आपके पास खरगोश स्थापित है, तो आप इसे डाउनलोड कर सकते हैं:
http://{server}:15672/cli/rabbitmqadmin
और इसे / usr / स्थानीय / बिन / खरगोशबीमादीन में सहेजें
तब तुम दौड़ सकते हो
rabbitmqadmin -u {user} -p {password} -V {vhost} delete queue name={name}
आमतौर पर इसके लिए सुडो की आवश्यकता होती है।
यदि आप अपना उपयोगकर्ता नाम और पासवर्ड टाइप करने से बचना चाहते हैं, तो आप कॉन्फ़िगर का उपयोग कर सकते हैं
rabbitmqadmin -c /var/lib/rabbitmq/.rabbitmqadmin.conf -V {vhost} delete queue name={name}
इस धारणा के तहत कि आपके पास फ़ाइल ** /var/lib/rabbitmq/.rabbitmqadmin.conf** है और नंगे माइनम हैं
hostname = localhost
port = 15672
username = {user}
password = {password}
EDIT: @ user299709 की टिप्पणी के अनुसार, यह इंगित करने में मददगार हो सकता है कि उपयोगकर्ता को खरगोश में 'व्यवस्थापक' के रूप में टैग किया जाना चाहिए। ( https://www.rabbitmq.com/management.html )
आप जोर देकर कहते हैं कि एक कतार मौजूद है (और यदि यह नहीं है तो इसे बनाएं) queue.declare का उपयोग करके । यदि आप मूल रूप से ऑटो-डिलीट को गलत पर सेट करते हैं, तो फिर से कॉल करें। ऑटोडेलेट के साथ फिर से कॉल करें सही होने पर सॉफ्ट एरर आएगा और ब्रोकर चैनल बंद कर देगा।
इसे हटाने के लिए आपको अब कतार .delete का उपयोग करने की आवश्यकता है ।
विवरण के लिए एपीआई प्रलेखन देखें:
यदि आप किसी अन्य क्लाइंट का उपयोग करते हैं, तो आपको समकक्ष विधि खोजने की आवश्यकता होगी। चूंकि यह प्रोटोकॉल का हिस्सा है, यह वहां होना चाहिए, और यह शायद चैनल या समकक्ष का हिस्सा है।
आप शेष दस्तावेज़ीकरण पर भी विशेष रूप से गेटिंग स्टार्ट सेक्शन का उपयोग कर सकते हैं, जिसमें बहुत सारे सामान्य उपयोग के मामले शामिल हैं।
अंत में, यदि आपके पास कोई प्रश्न है और कहीं और उत्तर नहीं मिल रहा है, तो आपको RabbitMQ चर्चा मेलिंग सूची पर पोस्ट करने का प्रयास करना चाहिए । डेवलपर्स वहां पूछे गए सभी सवालों के जवाब देने की पूरी कोशिश करते हैं।
RMQ सर्वर चला रहे होस्ट से सभी डिफ़ॉल्ट मानों के साथ त्वरित कतार हटाने के लिए एक संक्षिप्त सारांश:
curl -O http://localhost:15672/cli/rabbitmqadmin
chmod u+x rabbitmqadmin
./rabbitmqadmin delete queue name=myQueueName
किसी दिए गए vhost में एक पैटर्न से मेल खाते सभी कतारों को हटाने के लिए (जैसे रूट vhost में 'amq.gen'):
rabbitmqctl -p / list_queues | grep 'amq.gen' | cut -f1 -d$'\t' | xargs -I % ./rabbitmqadmin -V / delete queue name=%
एक अन्य विकल्प Management_plugin को सक्षम करने और एक ब्राउज़र पर इसे कनेक्ट करने के लिए होगा। आप सभी कतारों और उनके बारे में जानकारी देख सकते हैं। इस इंटरफ़ेस से कतारों को हटाना संभव और सरल है।
मैंने Piotr Stapp's जावास्क्रिप्ट / jQuery पद्धति को थोड़ा और सामान्य किया है, इसे एक फंक्शन में एनकैप्सुलेट करके और इसे थोड़ा सामान्य किया है।
यह फ़ंक्शन किसी दिए गए उपलब्ध क्यू को क्वेरी करने के लिए RabbitMQ HTTP API का उपयोग करता है vhost
, और फिर एक वैकल्पिक के आधार पर उन्हें हटा देता है queuePrefix
:
function deleteQueues(vhost, queuePrefix) {
if (vhost === '/') vhost = '%2F'; // html encode forward slashes
$.ajax({
url: '/api/queues/'+vhost,
success: function(result) {
$.each(result, function(i, queue) {
if (queuePrefix && !queue.name.startsWith(queuePrefix)) return true;
$.ajax({
url: '/api/queues/'+vhost+'/'+queue.name,
type: 'DELETE',
success: function(result) { console.log('deleted '+ queue.name)}
});
});
}
});
};
एक बार जब आप अपने खरगोश के प्रबंधन पृष्ठ पर अपने ब्राउज़र के जावास्क्रिप्ट कंसोल में इस फ़ंक्शन को पेस्ट करते हैं, तो आप इसे इस तरह से उपयोग कर सकते हैं:
'/' Vhost में सभी कतारों को हटा दें
deleteQueues('/');
'परीक्षण' के साथ '/' vhost शुरुआत में सभी कतार हटाएं
deleteQueues('/', 'test');
'Foo' के साथ 'dev' vhost शुरुआत में सभी कतारें हटाएं
deleteQueues('dev', 'foo');
कृपया अपने जोखिम पर इसका उपयोग करें!
प्रबंधन प्लगइन (वेब इंटरफ़ेस) आपको एक अजगर स्क्रिप्ट का लिंक देता है। आप इसका उपयोग कतारों को हटाने के लिए कर सकते हैं। मैंने बहुत सी कतारें निकालने के लिए इस पैटर्न का उपयोग किया:
python tmp/rabbitmqadmin --vhost=... --username=... --password=... list queues > tmp/q
vi tmp/q # remove all queues which you want to keep
cut -d' ' -f4 tmp/q| while read q;
do python tmp/rabbitmqadmin --vhost=... --username=... --password=... delete queue name=$q;
done
मैं इस उपनाम का उपयोग करता हूं .profile
:
alias qclean="rabbitmqctl list_queues | python ~/bin/qclean.py"
qclean.py
निम्नलिखित कोड कहां है:
import sys
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
queues = sys.stdin.readlines()[1:-1]
for x in queues:
q = x.split()[0]
print 'Deleting %s...' %(q)
channel.queue_delete(queue=q)
connection.close()
अनिवार्य रूप से, यह श्वेता बी पाटिल के कोड का एक पुनरावृत्त संस्करण है।
इंस्टॉल
$ sudo rabbitmq-plugins enable rabbitmq_management
और यदि आप लोकलहोस्ट का उपयोग कर रहे हैं तो http: // localhost: 15672 / # / कतारों में जाएं । डिफ़ॉल्ट पासवर्ड होगा username: guest
, password: guest
और कतार टैब पर जाएं और कतार हटाएं।
उम्मीद है कि यह किसी की मदद कर सकता है।
मैंने कोड के उपरोक्त टुकड़ों की कोशिश की लेकिन मैंने कोई स्ट्रीमिंग नहीं की।
sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do sudo rabbitmqctl delete_queue "$line"; done
।
मैं एक फाइल बनाता हूं जिसमें सभी कतार के नाम हैं और उन्हें हटाने के लिए लाइन से लाइन के माध्यम से छोरों। छोरों के लिए,while read ...
यह मेरे लिए नहीं किया। यह हमेशा पहली कतार के नाम पर रुकता था।
इसके अलावा, यदि आप किसी एकल कतार को हटाना चाहते हैं, तो उपरोक्त समाधान मदद करेंगे (अजगर, जावा ...) और भी do sudo rabbitmqctl delete_queue queue_name
। के rabbitmqctl
बजाय उपयोग कर रहा हूं rabbitmqadmin
।
स्थापित rabbitmq_management प्लगइन के साथ आप सभी अवांछित कतारों को हटाने के लिए इसे चला सकते हैं:
rabbitmqctl list_queues -p vhost_name |\
grep -v "fast\|medium\|slow" |\
tr "[:blank:]" " " |\
cut -d " " -f 1 |\
xargs -I {} curl -i -u guest:guest -H "content-type:application/json" -XDELETE http://localhost:15672/api/queues/<vhost_name>/{}
चलो आज्ञा को तोड़ते हैं:
rabbitmqctl list_queues -p vhost_name
वर्तमान में उनके पास सभी कतारों और कितने कार्य हैं।
grep -v "fast\|medium\|slow"
उन कतारों को फ़िल्टर कर देगा जिन्हें आप हटाना नहीं चाहते हैं, मान लें कि हम हर कतार को तेज , मध्यम या धीमे शब्दों के बिना हटाना चाहते हैं ।
tr "[:blank:]" " "
कतार के नाम और वहाँ कार्यों की मात्रा के बीच खरगोशबिटक् ट पर परिसीमन को सामान्य करेगा
cut -d " " -f 1
प्रत्येक पंक्ति को व्हॉट्सएप द्वारा विभाजित किया जाएगा और 1 कॉलम (कतार नाम) चुना जाएगा
xargs -I {} curl -i -u guest:guest -H "content-type:application/json" -XDELETE http://localhost:15672/api/queues/<vhost>/{}
कतार नाम को उठाएगा और इसे उस प्रक्रिया में सेट करेगा जहां हम {}
प्रक्रिया में फ़िल्टर नहीं की गई सभी कतार को हटाने वाले वर्ण को सेट करते हैं।
सुनिश्चित करें कि उपयोगकर्ता का उपयोग किया गया है प्रशासक की अनुमति है।
मैंने इसे अलग तरीके से किया, क्योंकि मेरे पास केवल प्रबंधन वेबपेज तक पहुंच थी। मैंने सरल "स्निपेट" बनाया जो जावास्क्रिप्ट में कतारों को हटाते हैं। यह रहा:
function zeroPad(num, places) {
var zero = places - num.toString().length + 1;
return Array(+(zero > 0 && zero)).join("0") + num;
}
var queuePrefix = "PREFIX"
for(var i=0; i<255; i++){
var queueid = zeroPad(i, 4);
$.ajax({url: '/api/queues/vhost/'+queuePrefix+queueid, type: 'DELETE', success: function(result) {console.log('deleted '+queuePrefix+queueid)}});
}
मेरी सभी कतारें प्रारूप में थीं: PREFIX_0001 से PREFIX_0XXX