回答:
まず、キューを一覧表示します。
rabbitmqadmin list queues name
次に、リストから1つずつ手動で削除する必要があります。
rabbitmqadmin delete queue name='queuename'
出力形式のため、表示されないので、からの応答をgrepできますlist queues
。または、すべてをクリアする方法(読み取り:すべての設定をリセットし、インストールをデフォルトの状態に戻す)を探している場合は、次のコマンドを使用します。
rabbitmqctl stop_app
rabbitmqctl reset # Be sure you really want to do this!
rabbitmqctl start_app
rabbitmqctl list_queues | grep 0 | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn
grep $'\t0'
何かしたいかもしれません。
ではrabbitmqadmin
、あなたは、このワンライナーでそれらを削除することができます。
rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
egrep
:私のコマンドは次のようになりますので、rabbitmqadmin -f tsv -q list queues name | egrep "%search word%" | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
管理プラグインとポリシーで実際に超簡単:
Goto 管理コンソール(localhost:15672)
後藤管理タブ
後藤ポリシー(右側)のタブ
ポリシーを追加
フィールドを埋める
保存する
これを試して:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
*** Not found: /api/queues/%2F/name
、出力が「name」列のあるASCIIテーブルであるため、それも示されました。私はrabbitmqadmin list queues name | awk '!/--|name/ {print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
それを修正するためにコマンドを微調整しました。
rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
rabbitmqadminがインストールされていない場合は、rabbitmqctlでキューを削除してみてください:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
delete_queue
もpurge_queue
コマンドもありませんrabbitmqctl
。私のような余分なソフトウェアをインストールするために自動的に生成されているように見えるキューの多くを削除し、私は好きではないだろうしたいと思いますrabbitmqadmin
...
rabbitmqctl purge_queue
ここで手動で働きました。-p <virtual-host>を追加するだけで済みました
delete_queue
とpurge_queue
は両方で利用でき、rabbitmqctl
私はそれらを正常に実行しました。おそらくあなたは古いバージョンを使用しています。
キューのリストを検索する引数を受け入れるdeleteRabbitMqQs.shを作成し、必要なパターンに一致するものだけを選択しました。引数を提供しない場合、それらはすべて削除されます!削除しようとしているキューのリストが表示され、破壊的な処理を行う前に終了できます。
for word in "$@"
do
args=true
newQueues=$(rabbitmqctl list_queues name | grep "$word")
queues="$queues
$newQueues"
done
if [ $# -eq 0 ]; then
queues=$(rabbitmqctl list_queues name | grep -v "\.\.\.")
fi
queues=$(echo "$queues" | sed '/^[[:space:]]*$/d')
if [ "x$queues" == "x" ]; then
echo "No queues to delete, giving up."
exit 0
fi
read -p "Deleting the following queues:
${queues}
[CTRL+C quit | ENTER proceed]
"
while read -r line; do
rabbitmqadmin delete queue name="$line"
done <<< "$queues"
渡す引数に対して異なる照合が必要な場合は、4行目のgrepを変更できます。すべてのキューを削除する場合、連続する3つのスペースがあるキューは削除されません。なぜなら、異なる言語で出力をrabbitmqctlで出力している人よりも偶然の可能性は低いと考えたからです。
楽しい!
キューが使用されていないために削除しようとしていて、リセットしたくない場合は、ポリシーを使用してキューのTTLを非常に低く設定し、TTLが渡されたらキューが自動的に削除されるのを待ちます。その後、ポリシーを削除します(https://www.rabbitmq.com/ttl.html)。
rabbitmqctl.bat set_policy delq ".*" '{"expires": 1}' --apply-to queues
ポリシーを削除するには
rabbitmqctl clear_policy delq
これは未使用の場合にのみ機能することに注意してくださいキュー
元の情報はこちら:http : //rabbitmq.1065348.n5.nabble.com/Deleting-all-queues-in-rabbitmq-td30933.html
PowerShellでこれを行う方法を次に示します。URLを更新する必要があるかもしれません
$cred = Get-Credential
iwr -ContentType 'application/json' -Method Get -Credential $cred 'http://localhost:15672/api/queues' | % {
ConvertFrom-Json $_.Content } | % { $_ } | ? { $_.messages -gt 0} | % {
iwr -method DELETE -Credential $cred -uri $("http://localhost:15672/api/queues/{0}/{1}" -f [System.Web.HttpUtility]::UrlEncode($_.vhost), $_.name)
}
以下のようにrabbitmqctl evalを使用できます。
rabbitmqctl eval 'IfUnused = false, IfEmpty = true, MatchRegex =
<<"^prefix-">>, [rabbit_amqqueue:delete(Q, IfUnused, IfEmpty) || Q <-
rabbit_amqqueue:list(), re:run(element(4, element(2, Q)), MatchRegex)
=/= nomatch ].'
上記は、「prefix-」で始まる名前を持つすべてのvhostsのすべての空のキューを削除します。必要に応じて、変数IfUnused、IfEmpty、MatchRegexを編集できます。
rabbitmqadmin
アクセスできない場合に最適です。
私はrabbitmqctlとresetコマンドを試しましたが、非常に遅いです。
これは私が見つけた最も速い方法です(ユーザー名とパスワードを置き換えてください):
#!/bin/bash
# Stop on error
set -eo pipefail
USER='guest'
PASSWORD='guest'
curl -sSL -u $USER:$PASSWORD http://localhost:15672/api/queues/%2f/ | jq '.[].name' | sed 's/"//g' | xargs -L 1 -I@ curl -XDELETE -sSL -u $USER:$PASSWORD http://localhost:15672/api/queues/%2f/@
# To also delete exchanges uncomment next line
# curl -sSL -u $USER:$PASSWORD http://localhost:15672/api/exchanges/%2f/ | jq '.[].name' | sed 's/"//g' | xargs -L 1 -I@ curl -XDELETE -sSL -u $USER:$PASSWORD http://localhost:15672/api/exchanges/%2f/@
注:これはデフォルトのvhost /でのみ機能します
キューを一覧表示するには、
./rabbitmqadmin -f tsv -q list queues
キューを削除するには、
./rabbitmqadmin delete queue name=name_of_queue
このコマンドは、すべてのキューを削除します
python rabbitmqadmin.py \
-H YOURHOST -u guest -p guest -f bash list queues | \
xargs -n1 | \
xargs -I{} \
python rabbitmqadmin.py -H YOURHOST -u guest -p guest delete queue name={}
このスクリプトは、 -f bash
、キューをリストとして出力するをです。
次に使用します xargs -n1
複数の変数に分割ためします
次に、それを使用しxargs -I{}
て次のコマンドを実行し、コマンドで置き換え{}
ます。
http://yourhost:15672/cli/
てダウンロードする必要があります。
非永続キューを削除するためにrabbitmqサーバーをリセットする必要はありません。サーバーを停止して再起動するだけで、使用可能なすべての非永続キューが削除されます。
rabbitmqadminのインストールに問題がある人は、最初にpythonをインストールする必要があります。
UNIXのようなオペレーティングシステムのユーザーは、rabbitmqadminをPATH内のディレクトリ、たとえば/ usr / local / binにコピーする必要があります。
Windowsユーザーは、PythonがPATH上にあることを確認し、python.exe rabbitmqadminとしてrabbitmqadminを呼び出す必要があります。
その後
http://{hostname}:15672/cli/rabbitmqadmin
てダウンロードします。キューを一覧表示し
python rabbitmqadmin list queues
ます。
キューを削除するには
python rabbitmqadmin delete queue name=Name_of_queue
すべてのキューを削除するには
1-ポリシーの宣言
python rabbitmqadmin declare policy name='expire_all_policies' pattern=.* definition={\"expires\":1} apply-to=queues
2-ポリシーを削除する
python rabbitmqadmin delete policy name='expire_all_policies'
スクリプトと完全なリセットなしですべてのキューと交換を削除する方法があります。管理インターフェースから仮想ホストを削除して再作成するだけです。これはvhostでも機能します/
ます。
復元する必要があるのは、新しく作成された仮想ホストの権限だけです。
わかりました、この回答の重要な修飾子:この質問はrabbitmqctlまたはrabbitmqadminのいずれかを使用してこれを解決するように求めています。私の回答は両方を使用する必要がありました。また、これはMacOS 10.12.6と、Homebrewでrabbitmqをインストールするときにインストールされ、rabbitmq 3.7.0として識別されるrabbitmqctlとrabbitmqadminのバージョンでテストされたことにも注意してください。brew list --versions
rabbitmqctl list_queues -p <VIRTUAL_HOSTNAME> name | sed 1,2d | xargs -I qname rabbitmqadmin --vhost <VIRTUAL_HOSTNAME> delete queue name=qname
別のオプションは、キューに関連付けられた仮想ホストを削除することです。これによりvhostに関連するすべてが削除されるため、警告が表示されますが、簡単で高速です。
注: RabbitMQチームはrabbitmq-users
メーリングリストを監視し、 StackOverflowに関する質問に答えることがあります。
上記のコードを試しましたが、ストリーミングは行いませんでした。
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 ...
、私のためにそれをしませんでした。常に最初のキュー名で停止していました。
rabbitmqadmin list queues|awk 'NR>3{print $4}'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname
rabbitmqctl list_queues name messages messages_ready \ messages_unacknowledged