খরগোশ এমকিউতে সারি মুছে ফেলা হচ্ছে


93

আমার খরগোশ এমকিউ নিয়ে কয়েকটা সারি চলছে। তাদের মধ্যে কয়েকটি এখন কোনও কাজের নয়, আমি কীভাবে এগুলি মুছতে পারি? দুর্ভাগ্যক্রমে আমি auto_deleteবিকল্পটি সেট করিনি ।

আমি যদি এখনই সেট করে রাখি তবে তা কি মুছে ফেলা হবে?

এখন কি এই সারিগুলি মুছে ফেলার কোনও উপায় আছে?

উত্তর:


121

আপনি যদি ডেটা ম্যানেজমেন্ট ডাটাবেসে কোনও যত্ন না করেন; অর্থাত users, vhosts, messagesইত্যাদি, এবং কেউই সম্পর্কে অন্যান্য queues, তারপর আপনি যা করতে পারেন reset, যাতে নিম্নলিখিত কমান্ড ব্যবহার করতে কমান্ড মাধ্যমে:

সতর্কতা: সারিগুলি ছাড়াও, এটি হবে অপসারণ কোন usersএবং vhosts, আপনি আপনার RabbitMQ সার্ভারে কনফিগার করেছেন; এবং যে কোনও স্থায়ীকে মুছে ফেলবেmessages

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

Rabbitmq ডকুমেন্টেশন বলছেন যে resetকমান্ড ব্যবহার করুন:

তার ভার্জিন স্থিতিতে একটি খরগোশ এমকিউ নোড প্রদান করে।

এটি সম্পর্কিত যে কোনও ক্লাস্টার থেকে নোড সরায়, পরিচালনা ডাটাবেস থেকে সমস্ত ডেটা সরিয়ে দেয়, যেমন কনফিগার করা ব্যবহারকারী এবং vhosts এবং সমস্ত ধ্রুবক বার্তা মুছে দেয় tes

সুতরাং, এটি ব্যবহারে সতর্কতা অবলম্বন করুন।


46
সতর্কতা: এটি আপনার খরগোশ সার্ভারে কনফিগার করেছেন এমন কোনও ব্যবহারকারী এবং ভোস্টগুলিও মুছে ফেলবে। আমি এটি হার্ড উপায় খুঁজে পেয়েছি :)
মাফ্রোসিস

উফ, এ নিয়ে দুঃখিত আমি খরগোশের সাথে জড়িত থাকার সময় আমার একটি সত্যিকারের বেসিক কনফিগারেশন থাকার পরে এটি আমি লক্ষ্য করি নি। আমি উত্তর আপডেট করব। ধন্যবাদ!
ফারুক সাহিন

4
এটি একটি সত্যই চরম উত্তর। আপনি "সার্ভারটি বন্ধ করুন এবং ডিস্কটি মুছুন" কিউগুলিকে "মুছুন" করতেও বলতে পারেন।
রুবিট্রেঙ্গলডোনো

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

উইন্ডোজটিতে: ইজি_ ইনস্টল ইনস্টল করতে, সেটআপলগুলির জন্য এমএস উইন্ডোজ ইনস্টলারটি চালান

> easy_install pip
> pip install pika==0.9.8

ইতিমধ্যে যারা পিকা নিয়ে কাজ করছেন তাদের জন্য অবশ্যই সহজ, অনেক ধন্যবাদ
এম.রেইনাল

27

রাবিটএমকিউ সংস্করণ> 3.0 এ, আপনি যদি এইচটিটিপি এপিআই ব্যবহার করতে পারেন তবে যদি খরগোশ কিউকিউ_ম্যানেজমেন্ট প্লাগইন সক্ষম থাকে। কেবলমাত্র 'অ্যাপ্লিকেশন / জেসন' এ কনটেন্ট-টাইপ সেট করা এবং ভোস্ট এবং সারির নাম সরবরাহ করতে ভুলবেন না:

IE একটি ভোস্ট 'পরীক্ষা' এবং সারির নাম 'টেস্টিকুই' দিয়ে কার্ল ব্যবহার করছে:

$ 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

4
আপনার ব্যবহারকারীকে administratorঅন্যথায় তারা এপিআই-র কিছু অংশ ব্যবহার করতে পারবেন না বলে ট্যাগ করা আছে তা নিশ্চিত করুন।
ubershmekel

4
আমি পাচ্ছি: $ 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}

সাধারণত এটি sudo প্রয়োজন।

আপনি যদি নিজের ব্যবহারকারীর নাম এবং পাসওয়ার্ড টাইপ করা এড়াতে চান তবে আপনি কনফিগার ব্যবহার করতে পারেন

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}

সম্পাদনা: @ ব্যবহারকারীর মন্তব্য হিসাবে, 299709, খরগোশের মধ্যে ব্যবহারকারীকে 'অ্যাডমিনিস্ট্রেটর' হিসাবে ট্যাগ হওয়া আবশ্যক তা উল্লেখ করা সহায়ক হতে পারে। ( https://www.rabbitmq.com/management.html )


এটি প্রত্যাবর্তন করে connect সংযোগ করতে পারল না: [এর্নো 111] সংযোগ অস্বীকার করেছে what's কি হচ্ছে তা দেখার জন্য আমার কোনও উপায় ডিবাগ করার জন্য?
ব্যবহারকারী 299709

লেখার লগগুলি, খরগোশের লগগুলি পরীক্ষা করুন ... ব্যবহারকারীর ভিহোস্টে কাজ করার অনুমতি নাও থাকতে পারে ... কোথা থেকে শুরু করবেন তা বলা কঠিন
লুকিনো

সমাধানটি 'অ্যাডমিনিস্ট্রেটর' ট্যাগ দিয়ে ব্যবহারকারীকে সেট
করাচ্ছিল

16

আরএমকিউ সার্ভার চলছে এমন হোস্টের সমস্ত ডিফল্ট মান সহ দ্রুত সারি মুছে ফেলার জন্য একটি সংক্ষিপ্তসার:

curl -O http://localhost:15672/cli/rabbitmqadmin
chmod u+x rabbitmqadmin
./rabbitmqadmin delete queue name=myQueueName

প্রদত্ত ভোস্টের কোনও প্যাটার্নের সাথে মিলে সমস্ত সারি মুছে ফেলতে (উদাহরণস্বরূপ মূলের vhost এ 'amq.gen' রয়েছে):

rabbitmqctl -p / list_queues | grep 'amq.gen' | cut -f1 -d$'\t' | xargs -I % ./rabbitmqadmin -V / delete queue name=%

15

আপনি দৃ as়ভাবে বলছেন যে queue.declare ব্যবহার করে একটি সারি বিদ্যমান (এবং এটি না থাকলে এটি তৈরি করুন) । আপনি যদি প্রাথমিকভাবে অটো-ডিলিটটিকে মিথ্যাতে সেট করেন, কুইউ.ডেক্লেয়ারকে আবার স্বতঃপরিচালনা দিয়ে সত্য কল করলে নরম ত্রুটি হবে এবং ব্রোকার চ্যানেলটি বন্ধ করে দেবে।

এটি মুছতে আপনার এখনই কাতার.ডিলেট ব্যবহার করা দরকার ।

বিশদগুলির জন্য এপিআই ডকুমেন্টেশন দেখুন:

আপনি যদি অন্য ক্লায়েন্ট ব্যবহার করেন তবে আপনাকে সমমানের পদ্ধতিটি খুঁজে বের করতে হবে। যেহেতু এটি প্রোটোকলের অংশ, তাই এটি থাকা উচিত এবং এটি সম্ভবত চ্যানেলের অংশ বা সমতুল্য।

আপনি বাকী ডকুমেন্টেশনগুলি, বিশেষত শুরু করা বিভাগ যা সাধারণ ব্যবহারের ক্ষেত্রে প্রচুর পরিমাণে অন্তর্ভুক্ত রয়েছে সে সম্পর্কেও একবার দেখতে চান।

শেষ অবধি, যদি আপনার কোন প্রশ্ন থাকে এবং উত্তর কোথাও খুঁজে না পান, আপনার রাবিট এমকিউ আলোচনা মেলিং তালিকায় পোস্ট করার চেষ্টা করা উচিত । বিকাশকারীরা সেখানে জিজ্ঞাসিত সমস্ত প্রশ্নের উত্তর দিতে যথাসাধ্য চেষ্টা করে।


10

আরেকটি বিকল্প হ'ল ম্যানেজমেন্ট_প্লাগিন সক্ষম করা এবং এটি ব্রাউজারের মাধ্যমে সংযুক্ত করা। আপনি তাদের সম্পর্কে সমস্ত সারি এবং তথ্য দেখতে পারেন। এই ইন্টারফেস থেকে সারিগুলি মুছে ফেলা সম্ভব এবং সহজ।


আমি এটি করেছি কিন্তু আমার পরিচালন_প্লাগিন আমার কমান্ডলাইন ইন্টারফেসের চেয়ে আলাদা অবস্থায় রয়েছে
মিষ্টি চিলি ফিলি

9

আমি পাইওটর স্টাপের জাভাস্ক্রিপ্ট / জিকুয়েরি পদ্ধতিটি আরও কিছুটা সাধারণ করেছি, এটিকে একটি ফাংশনে আবদ্ধ করে এবং কিছুটা সাধারণীকরণ করেছি।

এই ফাংশনটি প্রদত্তটিতে উপলব্ধ সারিগুলি জিজ্ঞাসা করতে RabbitMQ HTTP এপিআই ব্যবহার করে vhostএবং তারপরে একটি alচ্ছিকের ভিত্তিতে এগুলি মুছুন 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)}
                });
            });
        }
    });
};

আপনার খরগোশ এমকিউ পরিচালনা পৃষ্ঠায় থাকাকালীন একবার আপনি এই ফাংশনটি আপনার ব্রাউজারের জাভাস্ক্রিপ্ট কনসোলে পেস্ট করুন, আপনি এটি ব্যবহার করতে পারেন:

'/' ভোস্টে সমস্ত সারি মুছুন

deleteQueues('/');

'/' ভোস্টের সমস্ত পরীক্ষাগুলি 'পরীক্ষা' দিয়ে শুরু করে মুছুন

deleteQueues('/', 'test');

'ফু' দিয়ে শুরু করে 'দেব' ভোস্টের সমস্ত সারি মুছুন

deleteQueues('dev', 'foo');

এটি আপনার নিজের ঝুঁকিতে ব্যবহার করুন!


4
এটি কেবলমাত্র ওয়েব-প্রশাসক ব্যবহার করে একই উপসর্গের সাথে বিশাল সংখ্যক সারি সরিয়ে ফেলার জন্য পুরোপুরি কাজ করেছিল worked ধন্যবাদ!
এস্পেনোহ

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

6

ইনস্টল

$ sudo rabbitmq-plugins enable rabbitmq_management

এবং যদি আপনি লোকালহোস্ট ব্যবহার করছেন তবে HTTP: // লোকালহোস্ট: 15672 / # / কাতারে যান । ডিফল্ট পাসওয়ার্ড হতে হবে username: guest, password: guest এবং queues ট্যাবে যান এবং কিউ মুছে দিন।


মানুষ ... অনেক অনেক ধন্যবাদ আমি আপনার উত্তর খুব সহায়ক পেয়েছি।
ব্রেইকেট জেব্রেডিংল

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


1

আমি এমন একটি উত্তর খুঁজে বের করার সাথে লড়াই করছিলাম যা আমার প্রয়োজনের সাথে সামঞ্জস্যপূর্ণভাবে রাববিগমিতে একটি সারি মুছে ফেলবে। আমি তাই এই থ্রেডে উল্লেখ করার মতো মনে করি যে rabbitmqadminনিম্নলিখিত কমান্ডটি ব্যবহার না করে একটি একক সারি মুছে ফেলা সম্ভব :

rabbitmqctl delete_queue <queue_name>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.