从RabbitMQ中删除所有队列?

我安装了rabbitmqadmin ,并能够列出所有的交stream和队列。 如何使用rabbitmqadminrabbitmqctl删除所有队列。

首先,列出你的队列:

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