RabbitMQ में कतारें हटाना


93

मेरे पास RabbitMQ के साथ चलने वाली कुछ कतारें हैं। उनमें से कुछ का अब कोई फायदा नहीं है, मैं उन्हें कैसे हटा सकता हूं? दुर्भाग्य से मैंने auto_deleteविकल्प निर्धारित नहीं किया था ।

अगर मैं इसे अभी सेट करता हूं, तो क्या इसे हटा दिया जाएगा?

क्या अब उन कतारों को हटाने का कोई तरीका है?

जवाबों:


121

यदि आप प्रबंधन डेटाबेस में डेटा के बारे में परवाह नहीं करते हैं; यानी users, vhosts, messagesआदि, और न तो के बारे में अन्य queuesहै, तो आप कर सकते हैं resetक्रम में निम्न कमांड चलाकर कमांडलाइन के माध्यम से:

चेतावनी: कतारों के अलावा, यह किसी भी को हटा देगा usersऔर vhosts, आपने अपने RabbitMQ सर्वर पर कॉन्फ़िगर किया है; और किसी भी लगातार को हटा देगाmessages

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

RabbitMQ प्रलेखन का कहना है कि resetआदेश:

एक RabbitMQ नोड को उसकी कुंवारी अवस्था में लौटाता है।

किसी भी क्लस्टर से नोड को हटा देता है, प्रबंधन डेटाबेस से सभी डेटा को हटाता है, जैसे कॉन्फ़िगर किए गए उपयोगकर्ता और vhosts, और सभी लगातार संदेशों को हटा देता है।

इसलिए इसका इस्तेमाल करने में सावधानी बरतें।


46
चेतावनी: यह आपके खरगोश सर्वर पर आपके द्वारा कॉन्फ़िगर किए गए किसी भी उपयोगकर्ता और व्हाट्सएप को भी हटा देगा। मुझे यह कठिन तरीके से पता चला :)
mafrosis

उफ़, इस बारे में खेद है। जब से मैं खरगोश के साथ जुड़ा हुआ था उस समय मेरे पास वास्तव में बुनियादी विन्यास होने के बाद मैंने इस पर ध्यान नहीं दिया। मैं जवाब अपडेट कर दूंगा। धन्यवाद!
फारुक साहिन

3
यह वास्तव में चरम उत्तर है। आप यह भी कह सकते हैं कि "सर्वर को बंद करें और डिस्क को मिटा दें" कतारों को "हटाने" के लिए।
RubyTuesdayDONO

30
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

निश्चित रूप से पहले से ही पिका के साथ काम करने वालों के लिए आसान है, बहुत बहुत धन्यवाद
m.raynal

27

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

1
सुनिश्चित करें कि आपके उपयोगकर्ता को टैग किया गया है administratorअन्यथा वे API के कुछ हिस्सों का उपयोग नहीं कर सकते हैं।
ubershmekel

1
मुझे मिल रहा है: $ 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 हालांकि कतार अभी भी बनी हुई है :( - किसी भी विचार?
हैकरन जूल

23

वहाँ 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 )


यह रिटर्न `कनेक्ट नहीं कर सका: [इरनो 111] कनेक्शन ने मुझे मना कर दिया कि क्या चल रहा है इसे देखने के लिए कोई भी तरीका है?
192 बजे user299709

सामान्य लॉग की जांच करें, खरगोश लॉग ... उपयोगकर्ता के पास VHost पर काम करने की अनुमति नहीं हो सकती ... यह कहना मुश्किल है कि कहां से शुरू करें
लुकिनो

समाधान उपयोगकर्ता को 'व्यवस्थापक' टैग
user299709

15

आप जोर देकर कहते हैं कि एक कतार मौजूद है (और यदि यह नहीं है तो इसे बनाएं) queue.declare का उपयोग करके । यदि आप मूल रूप से ऑटो-डिलीट को गलत पर सेट करते हैं, तो फिर से कॉल करें। ऑटोडेलेट के साथ फिर से कॉल करें सही होने पर सॉफ्ट एरर आएगा और ब्रोकर चैनल बंद कर देगा।

इसे हटाने के लिए आपको अब कतार .delete का उपयोग करने की आवश्यकता है ।

विवरण के लिए एपीआई प्रलेखन देखें:

यदि आप किसी अन्य क्लाइंट का उपयोग करते हैं, तो आपको समकक्ष विधि खोजने की आवश्यकता होगी। चूंकि यह प्रोटोकॉल का हिस्सा है, यह वहां होना चाहिए, और यह शायद चैनल या समकक्ष का हिस्सा है।

आप शेष दस्तावेज़ीकरण पर भी विशेष रूप से गेटिंग स्टार्ट सेक्शन का उपयोग कर सकते हैं, जिसमें बहुत सारे सामान्य उपयोग के मामले शामिल हैं।

अंत में, यदि आपके पास कोई प्रश्न है और कहीं और उत्तर नहीं मिल रहा है, तो आपको RabbitMQ चर्चा मेलिंग सूची पर पोस्ट करने का प्रयास करना चाहिए । डेवलपर्स वहां पूछे गए सभी सवालों के जवाब देने की पूरी कोशिश करते हैं।


15

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=%

10

एक अन्य विकल्प Management_plugin को सक्षम करने और एक ब्राउज़र पर इसे कनेक्ट करने के लिए होगा। आप सभी कतारों और उनके बारे में जानकारी देख सकते हैं। इस इंटरफ़ेस से कतारों को हटाना संभव और सरल है।


मैंने ऐसा किया है, लेकिन मेरे management_plugin मेरे कमांडलाइन इंटरफ़ेस की तुलना में एक अलग स्थिति में है
स्वीट चिल्ली फिल्ली

9

मैंने 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');

कृपया अपने जोखिम पर इसका उपयोग करें!


1
यह केवल वेब-व्यवस्थापक का उपयोग करके एक ही उपसर्ग के साथ बड़ी संख्या में कतारों को हटाने के लिए पूरी तरह से काम करता है। धन्यवाद!
espenoh

6

प्रबंधन प्लगइन (वेब ​​इंटरफ़ेस) आपको एक अजगर स्क्रिप्ट का लिंक देता है। आप इसका उपयोग कतारों को हटाने के लिए कर सकते हैं। मैंने बहुत सी कतारें निकालने के लिए इस पैटर्न का उपयोग किया:

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

5

मैं इस उपनाम का उपयोग करता हूं .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()

अनिवार्य रूप से, यह श्वेता बी पाटिल के कोड का एक पुनरावृत्त संस्करण है।


5

इंस्टॉल

$ sudo rabbitmq-plugins enable rabbitmq_management

और यदि आप लोकलहोस्ट का उपयोग कर रहे हैं तो http: // localhost: 15672 / # / कतारों में जाएं । डिफ़ॉल्ट पासवर्ड होगा username: guest, password: guest और कतार टैब पर जाएं और कतार हटाएं।


यार ... बहुत बहुत धन्यवाद। मुझे आपका उत्तर बहुत मददगार लगा।
bereket gebredingle

5

उम्मीद है कि यह किसी की मदद कर सकता है।

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

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


4

स्थापित 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>/{}कतार नाम को उठाएगा और इसे उस प्रक्रिया में सेट करेगा जहां हम {}प्रक्रिया में फ़िल्टर नहीं की गई सभी कतार को हटाने वाले वर्ण को सेट करते हैं।

सुनिश्चित करें कि उपयोगकर्ता का उपयोग किया गया है प्रशासक की अनुमति है।


@ प्रेरणा के लिए धन्यवाद :)
हस्सेक

2

मैंने इसे अलग तरीके से किया, क्योंकि मेरे पास केवल प्रबंधन वेबपेज तक पहुंच थी। मैंने सरल "स्निपेट" बनाया जो जावास्क्रिप्ट में कतारों को हटाते हैं। यह रहा:

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

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