从RabbitMQ中删除所有队列?
我安装了rabbitmqadmin
,并能够列出所有的交stream和队列。 如何使用rabbitmqadmin
或rabbitmqctl
删除所有队列。
首先,列出你的队列:
rabbitmqadmin list queues name
然后从列表中,你需要手动删除它们:
rabbitmqadmin delete queue name='queuename'
由于输出格式,不会出现你可以从list queues
grep的响应。 或者,如果您只是在寻找清除所有内容的方法 (请参阅: 重置所有设置 ,将安装返回到默认状态),请使用:
rabbitmqctl stop_app rabbitmqctl reset # Be sure you really want to do this! rabbitmqctl start_app
使用rabbitmqadmin
您可以使用以下rabbitmqadmin
删除它们:
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
我做了一个deleteRabbitMqQs.sh,接受参数来search队列列表,只select一个匹配你想要的模式。 如果你不提供任何参数,它会删除所有的! 它显示你将要删除的队列列表,让你在做任何破坏性的事情之前退出。
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"
如果你想对传入的参数进行不同的匹配,你可以在第四行修改grep。 删除所有队列时,不会删除其中连续三个空格的队列,因为我认为比使用不同语言输出的rabbitmqctl的人要less得多。
请享用!
这是一种使用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) }
如果你想删除队列,因为它们没有被使用,你不想重置,一个选项是通过策略设置队列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
你可以使用如下的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-”开头的所有虚拟主机中的所有空队列。 您可以按照您的要求编辑variablesIfUnused,IfEmpty和MatchRegex。
这是一个更快的版本(使用parallel
安装sudo apt-get install parallel)扩展了@admenva的优秀答案
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)
这个命令删除你所有的队列
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
把它分成多个variables
然后我们使用xargs -I{}
来运行以下命令,并在命令中replace{}
。
有一种方法可以删除所有队列和交换没有脚本和完全重置。 您可以从pipe理界面删除并重新创build一个虚拟主机。 这甚至可以用于vhost /
。
唯一需要恢复的是新创build的虚拟主机的权限。
您不需要重置rabbitmq服务器来删除非持久队列。 只需停止服务器并重新启动,它将删除所有可用的非持久队列。
如果您没有安装rabbitmqadmin,请尝试使用rabbitmqctl清除队列:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
rabbitmqadmin list queues|awk 'NR>3{print $4}'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname