Answers:
首先,列出您的队列:
rabbitmqadmin list queues name
然后,您需要从列表中手动删除它们:
rabbitmqadmin delete queue name='queuename'
由于输出格式的原因,您可以grep来自的响应,但不会出现list queues
。另外,如果您只是在寻找一种清除所有内容的方法(请参阅:重设所有设置,将安装恢复为默认状态),请使用:
rabbitmqctl stop_app
rabbitmqctl reset # Be sure you really want to do this!
rabbitmqctl start_app
rabbitmqctl list_queues | grep 0 | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn
grep $'\t0'
做某事。
使用以下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
使用管理插件和策略实际上超级简单:
转到管理控制台(localhost:15672)
转到管理标签
转到策略选项卡(在右侧)
新增政策
填写栏位
保存
试试这个:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
*** Not found: /api/queues/%2F/name
因为输出是带有“名称”列的ASCII表。我调整了该命令以对其rabbitmqadmin list queues name | awk '!/--|name/ {print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
进行修复。
rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
如果您没有安装rabbitmqadmin,请尝试使用rabbitmqctl清除队列:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
delete_queue
nor purge_queue
命令rabbitmqctl
。我想清除很多似乎自动生成的队列,并且我不想安装其他软件,例如rabbitmqadmin
...
rabbitmqctl purge_queue
在这里手动工作。我只需要添加-p <virtual-host>
delete_queue
和purge_queue
在可rabbitmqctl
我刚把它们运行成功。也许您使用的是旧版本。
我制作了一个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"
如果您希望对传入的参数进行其他匹配,则可以在第四行中更改grep。删除所有队列时,它不会删除其中有三个连续空格的队列,因为我认为,与用RabbitMqctl用不同语言打印输出的人相比,偶然性会更罕见。
请享用!
如果您由于未使用并且不想重置而试图删除队列,一种选择是通过策略将队列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
在Rabbit版本3.7.10中,您可以在具有root权限的情况下运行以下命令:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
这是使用PowerShell执行此操作的一种方法。网址可能需要更新
$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)
}
您可以如下使用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。
rabbitmqadmin
无法访问的时间。
我尝试了rabbitmqctl并重置了命令,但是它们非常慢。
这是我找到的最快方法(替换您的用户名和密码):
#!/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/@
注意:这仅适用于默认的虚拟主机/
要列出队列,
./rabbitmqadmin -f tsv -q list queues
要删除队列,
./rabbitmqadmin delete queue name=name_of_queue
此命令删除所有队列
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{}
它将运行以下命令,并替换{}
命令。
http://yourhost:15672/cli/
并下载它。
您无需重置rabbitmq服务器即可删除非持久队列。只需停止服务器并重新启动,它将删除所有可用的非持久队列。
对于谁有安装rabbitmqadmin的问题,您应该首先安装python。
类似UNIX的操作系统用户需要将Rabbitmqadmin复制到PATH中的目录,例如/ usr / local / bin。
Windows用户将需要确保Python在其PATH上,并将rabbitmqadmin调用为python.exe rabbitmqadmin。
然后
http://{hostname}:15672/cli/rabbitmqadmin
下载。列出队列
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'
有一种无需脚本和完全重置即可删除所有队列和交换的方法。您可以从管理界面删除并重新创建虚拟主机。这甚至适用于vhost /
。
您唯一需要还原的就是新创建的虚拟主机的权限。
好的,此答案的重要限定词:该问题确实要求使用Rabbitmqctl或Rabbitmqadmin来解决此问题,我的答案需要同时使用两者。另外,请注意,这已在MacOS 10.12.6上进行了测试,并在使用Homebrew安装rabbitmq时安装了rabbitmqctl和rabbitmqadmin版本,并标识brew list --versions
为rabbitmq 3.7.0。
rabbitmqctl list_queues -p <VIRTUAL_HOSTNAME> name | sed 1,2d | xargs -I qname rabbitmqadmin --vhost <VIRTUAL_HOSTNAME> delete queue name=qname
另一个选择是删除与队列关联的虚拟主机。这将删除与虚拟主机关联的所有内容,因此被警告,但它既简单又快速。
注:在RabbitMQ的团队监控的rabbitmq-users
邮件列表,只有时StackOverflow上回答问题。
我尝试了以上代码,但没有进行任何流式处理。
sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do sudo rabbitmqctl delete_queue "$line"; done
。
我生成了一个包含所有队列名称的文件,并逐行循环删除它们。对于循环,while read ...
没有为我做。它总是在第一个队列名称处停止。
rabbitmqadmin list queues|awk 'NR>3{print $4}'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname
rabbitmqctl list_queues name messages messages_ready \ messages_unacknowledged