rabbitmqadmin
をインストールし、すべての交換とキューをリストできました。 rabbitmqadmin
またはrabbitmqctl
を使用してすべてのキューを削除するにはどうすればよいですか。
まず、キューをリストします。
rabbitmqadmin list queues name
次に、リストから1つずつ手動で削除する必要があります。
rabbitmqadmin delete queue name='queuename'
出力形式のため、list queues
からの応答をgrepできるとは思われません。または、everythingをクリアする方法を探している場合(読み取り:すべての設定をリセット、インストールをデフォルト状態)、使用:
rabbitmqctl stop_app
rabbitmqctl reset # Be sure you really want to do this!
rabbitmqctl start_app
rabbitmqadmin
を使用すると、この1行でそれらを削除できます。
rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
これを試して:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
管理プラグインとポリシーで実際に非常に簡単:
Goto 管理コンソール(localhost:15672)
ジャンプ管理者タブ
ジャンプポリシータブ(右側)
追加ポリシー
フィールドを埋める
保存する
Rabbitmqadminがインストールされていない場合は、rabbitmqctlでキューをパージしてください。
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
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つの連続したスペースが含まれるキューは削除されません。
楽しい!
キューが使用されておらずリセットしたくないためにキューを削除しようとしている場合、1つのオプションは、キューをTTLに非常に低く設定することです。キューが自動になるまで待ちます。 TTLが渡されると削除され、ポリシーが削除されます( https://www.rabbitmq.com/ttl.html )。
rabbitmqctl.bat set_policy delq ".*" '{"expires": 1}' --apply-to queues
ポリシーを削除するには
rabbitmqctl clear_policy delq
これはunusedキューに対してのみ機能することに注意してください。
ここに元の情報: 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-」で始まる名前を持つすべての仮想ホスト内のすべての空のキューを削除します。要件に応じて、変数IfUnused、IfEmpty、MatchRegexを編集できます。
Rabbitmqctl one linerを使用してすべてのキューを削除する
rabbitmqctl list_queues | awk '{ print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
Rabbitバージョン3.7.10では、root権限で以下のコマンドを実行できます。
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
空ではないキューのみをパージする場合(はるかに高速):
rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
私にとっては、キュー(空のキューと空でないキューの両方)を削除するのに2〜3秒かかります。したがって、50個のキューを繰り返し処理するのは非常に苦痛です。
キューをリストするには、
./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{}
を使用し、コマンド内の{}
を置き換えます。
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 /でのみ機能します
これは、@ admenvaによる優れた回答を拡張した高速バージョン(parallel
install Sudo apt-get install parallelを使用)です。
parallel -j 50 rabbitmqadmin -H YOUR_Host_OR_LOCALHOST -q delete queue name={} ::: $(rabbitmqadmin -H YOUR_Host_OR_LOCALHOST -f tsv -q list queues name)
non-durableキューを削除するためにrabbitmqサーバーをリセットする必要はありません。サーバーを停止して再起動するだけで、使用可能なすべての非永続キューが削除されます。
上記のコードを試してみましたが、ストリーミングはしませんでした。
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 ...
は私のためにそれをしませんでした。最初のキュー名で常に停止していました。
さて、この答えの重要な修飾子:質問は、これを解決するためにrabbitmqctl OR rabbitmqadminのどちらかを使用するように求めています。また、これはMacOS 10.12.6と、Homebrewでrabbitmqをインストールするときにインストールされ、brew list --versions
で識別されるrabbitmqctlおよびrabbitmqadminのバージョンでテストされていることに注意してください。 rabbitmq 3.7.
rabbitmqctl list_queues -p <VIRTUAL_HOSTNAME> name | sed 1,2d | xargs -I qname rabbitmqadmin --vhost <VIRTUAL_HOSTNAME> delete queue name=qname
スクリプトや完全なリセットなしですべてのキューと交換を削除する方法があります。管理インターフェースから仮想ホストを削除して再作成することができます。これは、vhost /
でも機能します。
復元する必要があるのは、新しく作成された仮想ホストの権限だけです。
別のオプションは、キューに関連付けられた仮想ホストを削除することです。これにより、vhostに関連付けられているすべてのものが削除されますので注意してください。
注意: RabbitMQチームは rabbitmq-users
メーリングリスト を監視し、StackOverflowに関する質問に答えるだけです。