RabbitMQで実行しているキューがいくつかあります。それらのうちのいくつかは現在役に立たないのですが、どうすれば削除できますか?残念ながら、私はauto_delete
オプションを設定していませんでした。
今設定すると削除されますか?
これらのキューを今すぐ削除する方法はありますか?
回答:
管理データベースのデータを気にしない場合; すなわちusers
、vhosts
、messages
など、そしてどちらについて他queues
、その後、あなたができるreset
ために、次のコマンドを実行して、コマンドライン経由:
警告:これにより、キューに加えて、RabbitMQサーバーで構成されているすべてのとが削除されます。そして永続的なものを削除します
users
vhosts
messages
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
RabbitMQのドキュメントはと言うreset
コマンドを実行します。
RabbitMQノードを未使用の状態に戻します。
所属するクラスターからノードを削除し、構成済みのユーザーや仮想ホストなどのすべてのデータを管理データベースから削除し、すべての永続メッセージを削除します。
そのため、使用には注意してください。
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'に設定し、仮想ホストとキュー名を指定してください:
仮想ホスト「test」とキュー名「testqueue」でcurlを使用する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
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があります。
rabbitがインストールされているサーバーに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
特定のvhostのパターンに一致するすべてのキューを削除するには(たとえば、ルートvhostに '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または同等のものの一部です。
また、残りのドキュメント、特に多くの一般的な使用例をカバーする「はじめに」セクションを確認することもできます。
最後に、質問があって他に答えが見つからない場合は、RabbitMQディスカッションメーリングリストに投稿してみてください。開発者は、そこで尋ねられるすべての質問に答えるために最善を尽くします。
別のオプションは、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'で始まる '/'仮想ホスト内のすべてのキューを削除します
deleteQueues('/', 'test');
「dev」仮想ホストの「foo」で始まるすべてのキューを削除します
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
[キュー]タブに移動してキューを削除します。
うまくいけば、それは誰かを助けるかもしれません。
上記のコードを試しましたが、ストリーミングは行いませんでした。
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 ...
、私のためにそれをしませんでした。常に最初のキュー名で停止していました。
また、1つのキューを削除する場合は、上記の解決策(Python、Java ...)も役立ちます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"
削除したくないキューをフィルタリングします。たとえば、fast、medium、またはslowの語なしですべてのキューを削除するとします。
tr "[:blank:]" " "
キューの名前とそこにあるタスクの量の間でrabbitmqctlの区切り文字を正規化します
cut -d " " -f 1
う分割空白で各行を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の形式でした