web-dev-qa-db-ja.com

RabbitMQからすべてのキューを削除しますか?

rabbitmqadminをインストールし、すべての交換とキューをリストできました。 rabbitmqadminまたはrabbitmqctlを使用してすべてのキューを削除するにはどうすればよいですか。

172
Cory

まず、キューをリストします。

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
252
lukiffer

rabbitmqadminを使用すると、この1行でそれらを削除できます。

rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
46
admenva

これを試して:

 rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
19
Gathole

管理プラグインとポリシーで実際に非常に簡単:

  • Goto 管理コンソール(localhost:15672)

  • ジャンプ管理者タブ

  • ジャンプポリシータブ(右側)

  • 追加ポリシー

  • フィールドを埋める

    • 仮想ホスト:選択
    • 名前:すべてのポリシーを期限切れにする(後で削除)
    • パターン:。*
    • 適用先:キュー
    • 定義:expires with value 1(タイプを文字列から数値に変更)
  • 保存する

  • チェックアウトキュータブをもう一度
  • すべてのキューを削除する必要があります
  • そしてポリシーを削除することを忘れないでください!!!!!!
18
Mesut A.

Rabbitmqadminがインストールされていない場合は、rabbitmqctlでキューをパージしてください。

rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue

8
Anatoly Rugalev

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つの連続したスペースが含まれるキューは削除されません。

楽しい!

6
Dan

キューが使用されておらずリセットしたくないためにキューを削除しようとしている場合、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

6
user783836

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)
 }
5
klumsy

以下のように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を編集できます。

3
George Ninan

Rabbitmqctl one linerを使用してすべてのキューを削除する

rabbitmqctl list_queues | awk '{ print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
3
Marian

Rabbitバージョン3.7.10では、root権限で以下のコマンドを実行できます。

rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
3
Mohammad Naseri

空ではないキューのみをパージする場合(はるかに高速):

rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue

私にとっては、キュー(空のキューと空でないキューの両方)を削除するのに2〜3秒かかります。したがって、50個のキューを繰り返し処理するのは非常に苦痛です。

2
Duc Tran

キューをリストするには、

./rabbitmqadmin -f tsv -q list queues

キューを削除するには、

./rabbitmqadmin delete queue name=name_of_queue
2

このコマンドはすべてのキューを削除します

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{}を使用し、コマンド内の{}を置き換えます。

1
Kevin Simper

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 /でのみ機能します

1
Aalex Gabi

これは、@ 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)

1
alonisser

non-durableキューを削除するためにrabbitmqサーバーをリセットする必要はありません。サーバーを停止して再起動するだけで、使用可能なすべての非永続キューが削除されます。

1
ErAcube

上記のコードを試してみましたが、ストリーミングはしませんでした。

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 ...は私のためにそれをしませんでした。最初のキュー名で常に停止していました。

0
Julien Nyambal

さて、この答えの重要な修飾子:質問は、これを解決するために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

0
Brett Tofel

スクリプトや完全なリセットなしですべてのキューと交換を削除する方法があります。管理インターフェースから仮想ホストを削除して再作成することができます。これは、vhost /でも機能します。

復元する必要があるのは、新しく作成された仮想ホストの権限だけです。

0
starteleport

別のオプションは、キューに関連付けられた仮想ホストを削除することです。これにより、vhostに関連付けられているすべてのものが削除されますので注意してください。


注意: RabbitMQチームは rabbitmq-usersメーリングリスト を監視し、StackOverflowに関する質問に答えるだけです。

0
Luke Bakken