インストールrabbitmqadmin
して、すべての交換とキューを一覧表示できました。すべてのキューを使用rabbitmqadmin
または削除するにはどうすればよいですか。rabbitmqctl
24 に答える
まず、キューを一覧表示します。
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
キューが使用されておらず、リセットしたくないという理由でキューを削除しようとしている場合、1 つのオプションは、ポリシーを介してキューの 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)
}
私は 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 で出力を別の言語で出力するよりも、発生する可能性が低いと考えたためです。
楽しみ!
以下のように 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-」で始まる名前を持つすべての vhost 内のすべての空のキューを削除します。必要に応じて変数 IfUnused、IfEmpty、MatchRegex を編集できます。
非永続キューを削除するために rabbitmq サーバーをリセットする必要はありません。サーバーを停止して再起動するだけで、使用可能なすべての非永続キューが削除されます。
これは、@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)
スクリプトや完全なリセットなしで、すべてのキューと交換を削除する方法があります。管理インターフェイスから仮想ホストを削除して再作成するだけです。これは vhost でも機能し/
ます。
復元する必要があるのは、新しく作成された仮想ホストのアクセス許可だけです。
もう 1 つのオプションは、キューに関連付けられている vhost を削除することです。これにより、仮想ホストに関連付けられているすべてが削除されるため、注意が必要ですが、簡単で高速です.
注: RabbitMQ チームはメーリング リストを監視しておりrabbitmq-users
、 StackOverflow に関する質問に回答する場合があります。
rabbitmqadmin list queues|awk 'NR>3{print $4}'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname