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


188

インストールしてrabbitmqadmin、すべてのエクスチェンジとキューをリストすることができました。すべてのキューをどのように使用rabbitmqadminまたはrabbitmqctl削除できますか?

回答:


272

まず、キューを一覧表示します。

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

4
rabbitmqで保留中のすべてのタスクを表示するには:rabbitmqctl list_queues name messages messages_ready \ messages_unacknowledged
Guillaume Vincent

2
「rabbitmqctl reset」を実行すると、すべてが「工場出荷時の設定」にリセットされることに注意してください。あなたが作成したRabbitMQユーザー、仮想ホストなどはすべて吹き飛ばされます。
thoufek 2014年

謝罪@ smartnut007、回答の2番目の部分を免責事項で明確にしました。
ルキファー

24
空のキューをつかむだけです。rabbitmqctl list_queues | grep 0 | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn
au_stan 2014年

4
@au_stan名前またはカウントが0のすべてのキューが削除されます。grep $'\t0'何かしたいかもしれません。
2015

51

では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
Logans

47

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

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

  • 後藤管理タブ

  • 後藤ポリシー(右側)のタブ

  • ポリシーを追加

  • フィールドを埋める

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

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

1
定義で「番号」を選択します。デフォルト(「文字列」)では機能しません
Mathias

素晴らしい答え、実際に私の一日を作りました。リストから「Exchangeとキュー」を選択すると、キューとExchangeの両方を簡単に削除できます。これが受け入れられる答えになればいいのですが。
Wiktor Zychla、2018

インスタンスSSHをいじる必要がない非常にクリーンなソリューション。
acidburn23

残念ながら誰もが管理プラグインとポリシーのインストール方法を説明していません
gelonida

@MesutA。どうもありがとう。この記事にこのリンクを含めるのは良いことだと思います。コメントが削除される可能性があるため、回答に追加することをお勧めします。しかし、私は現在少なくともこの情報を持っています
ゲロニダ

19

これを試して:

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

2
これは私にとってはうまくいきましたが*** Not found: /api/queues/%2F/name、出力が「name」列のあるASCIIテーブルであるため、それも示されました。私はrabbitmqadmin list queues name | awk '!/--|name/ {print $2}' | xargs -I qn rabbitmqadmin delete queue name=qnそれを修正するためにコマンドを微調整しました。
Mark Edington 2017年

rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
スコットレナード

9

rabbitmqadminがインストールされていない場合は、rabbitmqctlでキューを削除してみてください:

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


にはdelete_queuepurge_queueコマンドもありませんrabbitmqctl。私のような余分なソフトウェアをインストールするために自動的に生成されているように見えるキューの多くを削除し、私は好きではないだろうしたいと思いますrabbitmqadmin...
Rolice

rabbitmqctl purge_queueここで手動で働きました。-p <virtual-host>を追加するだけで済みました
Roman Susi

@Roliceが上で述べたこととは逆に、delete_queuepurge_queueは両方で利用でき、rabbitmqctl私はそれらを正常に実行しました。おそらくあなたは古いバージョンを使用しています。
Richard Dunn

いいですね、最近追加された可能性があります。
Rolice、

6

キューのリストを検索する引数を受け入れる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で出力している人よりも偶然の可能性は低いと考えたからです。

楽しい!


6

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


6

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

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

5

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

これは空でないキューのみを削除することに注意してください。-gt句を削除してすべてのキューを削除します
Peter Goodman

4

以下のように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アクセスできない場合に最適です。
NuSkooler

これはlist_queuesよりはるかに速いことがわかりました
TerrenceSun

3

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

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

2

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

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

私の場合、キュー(空のキューと空でないキューの両方)を削除するには2〜3秒かかるため、50のキューを反復処理するのは非常に面倒です。


2

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


2

キューを一覧表示するには、

./rabbitmqadmin -f tsv -q list queues

キューを削除するには、

./rabbitmqadmin delete queue name=name_of_queue

1

parallel@admenvaによる優れた答えを拡張したより速いバージョン(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

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

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{}て次のコマンドを実行し、コマンドで置き換え{}ます。


私は10種類の答えを試してみましたが、これは、他のすべての設定を削除せずにキューを削除するために実際に機能した唯一のものです。ありがとう!rabbitmqctlに "drop all queues"コマンドがあるだけでは信じられません。
sudo

ところで、rabbitmqadminを取得するには、それに移動しhttp://yourhost:15672/cli/てダウンロードする必要があります。
sudo

1

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


耐久性のあるキューを含みますか?そうは思いません。私はあなたの答えを修飾します。
ヘンディイラワン2015年

いいえ、サーバーを停止して永続キューを削除することはできません。キューの下のRabbitMQ管理Webインターフェイスから削除できます。
ErAcube 2015年

実際にそうです、これは私を助け、約4500の自動生成されたキューはすべてなくなりました。これらは耐久性のないものだったようです。ありがとう!
ロリス

1

rabbitmqadminのインストールに問題がある人は、最初にpythonをインストールする必要があります。

UNIXのようなオペレーティングシステムのユーザーは、rabbitmqadminをPATH内のディレクトリ、たとえば/ usr / local / binにコピーする必要があります。

Windowsユーザーは、PythonがPATH上にあることを確認し、python.exe rabbitmqadminとしてrabbitmqadminを呼び出す必要があります。

その後

  1. 参照しhttp://{hostname}:15672/cli/rabbitmqadminてダウンロードします。
  2. 含まれているフォルダに移動し、管理者権限でcmdを実行します

キューを一覧表示し 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'

0

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

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


0

わかりました、この回答の重要な修飾子:この質問はrabbitmqctlまたはrabbitmqadminのいずれかを使用してこれを解決するように求めています。私の回答は両方を使用する必要がありました。また、これはMacOS 10.12.6と、Homebrewでrabbitmqをインストールするときにインストールされ、rabbitmq 3.7.0として識別されるrabbitmqctlrabbitmqadminのバージョンでテストされたことにも注意してください。brew list --versions

rabbitmqctl list_queues -p <VIRTUAL_HOSTNAME> name | sed 1,2d | xargs -I qname rabbitmqadmin --vhost <VIRTUAL_HOSTNAME> delete queue name=qname


0

別のオプションは、キューに関連付けられた仮想ホストを削除することです。これによりvhostに関連するすべてが削除されるため、警告が表示されますが、簡単で高速です。


注: RabbitMQチームrabbitmq-usersメーリングリストを監視し StackOverflowに関する質問に答えることがあります。


0

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

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
rabbitmqadmin list queues|awk 'NR>3{print $4}'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname

1
これを実行すると、次の
Robert Ross 14

「head -n-1」は「head -1」または「head -n 1」のいずれかである必要があります
Gerd Busker
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.