RabbitMQで実行しているキューがいくつかあります。それらのいくつかは今は役に立たないのですが、どうすればそれらを削除できますか?残念ながら、auto_delete
オプションを設定していませんでした。
今設定すると、削除されますか?
これらのキューを今すぐ削除する方法はありますか?
他のキューを気にしない場合は、次のコマンドを順番に実行することで、コマンドラインからすべてのキューを削除できます。
警告:これも削除任意ユーザーおよびvhostsウサギサーバーで設定済み
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
Rabbitmqのドキュメントでは、reset
コマンドは次のように記述されています。
所属するクラスターからノードを削除し、構成されたユーザーや仮想ホストなどの管理データベースからすべてのデータを削除し、すべての永続メッセージを削除します。
そのため、使用には注意してください。
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(
'localhost'))
channel = connection.channel()
channel.queue_delete(queue='queue-name')
connection.close()
次のようにpikaパッケージをインストールします
$ Sudo pip install pika==0.9.8
インストールはpipおよびgit-coreパッケージに依存するため、最初にインストールする必要がある場合があります。
Ubuntuの場合:
$ Sudo apt-get install python-pip git-core
Debianの場合:
$ Sudo apt-get install python-setuptools git-core
$ Sudo easy_install pip
Windowsの場合:easy_installをインストールするには、setuptools用のMS Windowsインストーラーを実行します
> easy_install pip
> pip install pika==0.9.8
RabbitMQバージョン> 3.0では、rabbitmq_managementプラグインが有効になっている場合、HTTP APIも利用できます。必ずcontent-typeを「application/json」に設定し、vhostとキュー名を指定してください:
I.E. vhost 'test'およびキュー名 'testqueue'でcurlを使用:
$ 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
rabbitmqadminがありますが、これはコンソールからの作業に適しています。
ウサギをインストールしたサーバーにssh /ログインした場合、次からダウンロードできます。
http://{server}:15672/cli/rabbitmqadmin
そして/ usr/local/bin/rabbitmqadminに保存します
その後、実行することができます
rabbitmqadmin -u {user} -p {password} -V {vhost} delete queue name={name}
通常、Sudoが必要です。
ユーザー名とパスワードの入力を避けたい場合は、configを使用できます
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}
編集:@ user299709からのコメントの時点で、ユーザーはウサギの「管理者」としてタグ付けする必要があることを指摘しておくと役立つ場合があります。 ( https://www.rabbitmq.com/management.html )
RMQサーバーを実行しているホストからのすべてのデフォルト値を使用したキューの迅速な削除の簡単な要約:
curl -O http://localhost:15672/cli/rabbitmqadmin
chmod u+x rabbitmqadmin
./rabbitmqadmin delete queue name=myQueueName
特定の仮想ホスト(たとえば、ルート仮想ホストに「amq.gen」を含む)のパターンに一致するすべてのキューを削除するには:
rabbitmqctl -p / list_queues | grep 'amq.gen' | cut -f1 -d$'\t' | xargs -I % ./rabbitmqadmin -V / delete queue name=%
queue.declareを使用して、キューが存在することをアサートします(存在しない場合は作成します)。最初に自動削除をfalseに設定した場合、autodelete trueを指定してqueue.declareを再度呼び出すと、ソフトエラーが発生し、ブローカーはチャネルを閉じます。
削除するには、queue.deleteを使用する必要があります。
詳細については、APIドキュメントをご覧ください。
別のクライアントを使用する場合、同等のメソッドを見つける必要があります。これはプロトコルの一部であるため、そこにあるはずであり、おそらくChannelまたは同等のものの一部です。
また、ドキュメントの残りの部分、特に多くの一般的なユースケースをカバーする Getting Started セクションもご覧ください。
最後に、質問があり、他の場所で答えが見つからない場合は、 RabbitMQ Discuss メーリングリストに投稿してみてください。開発者は、そこに寄せられたすべての質問に答えるために最善を尽くします。
別のオプションは、management_pluginを有効にし、ブラウザーを介してそれに接続することです。すべてのキューとそれらに関する情報を見ることができます。このインターフェイスからキューを削除することは可能であり、簡単です。
Piotr StappのJavaScript/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)}
});
});
}
});
};
RabbitMQ管理ページでブラウザのJavaScriptコンソールにこの関数を貼り付けたら、次のように使用できます。
「/」仮想ホスト内のすべてのキューを削除します
deleteQueues('/');
「test」で始まる「/」vhost内のすべてのキューを削除します
deleteQueues('/', 'test');
「foo」で始まる「dev」vhost内のすべてのキューを削除します
deleteQueues('dev', 'foo');
ご自身の責任でこれを使用してください!
管理プラグイン(Webインターフェース)は、pythonスクリプトへのリンクを提供します。これを使用してキューを削除できます。このパターンを使用して、多くのキューを削除しました。
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()
基本的に、これはShweta B. Patilのコードの反復バージョンです。
インストール
$ Sudo rabbitmq-plugins enable rabbitmq_management
localhostを使用している場合は、 http:// localhost:15672 /#/ queues に移動します。デフォルトのパスワードはusername: guest
、password: guest
になり、[キュー]タブに移動してキューを削除します。
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"
は、削除したくないキューをフィルタリングします。たとえば、fast、mediumまたは遅い。
tr "[:blank:]" " "
は、キューの名前とそこにあるタスクの量の間のrabbitmqctlの区切り文字を正規化します
cut -d " " -f 1
は分割各行を空白で区切り、最初の列(キュー名)を選択します
xargs -I {} curl -i -u guest:guest -H "content-type:application/json" -XDELETE http://localhost:15672/api/queues/<vhost>/{}
はキュー名を取得し、{}
文字を設定した場所に設定して、プロセスでフィルター処理されていないすべてのキューを削除します。
使用されているユーザーに管理者権限があることを確認してください。
管理Webページにしかアクセスできないため、別の方法でやった。 Javascriptでキューを削除する単純な「スニペット」を作成しました。ここにあります:
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でした
誰かの助けになるといいのですが。
上記のコードを試してみましたが、ストリーミングはしませんでした。
Sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do Sudo rabbitmqctl delete_queue "$line"; done
。
すべてのキュー名を含むファイルを生成し、それらを削除するために1行ずつループします。ループの場合、while read ...
は私のためにそれをしませんでした。最初のキュー名で常に停止していました。
また、単一のキューを削除する場合は、上記の解決策が役立ちます(python、Java ...)およびdo Sudo rabbitmqctl delete_queue queue_name
も役立ちます。 rabbitmqctl
の代わりにrabbitmqadmin
を使用しています。