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"
19 回答
使用
rabbitmqadmin
,您可以使用此单行删除它们:试试这个:
首先,列出你的队列:
rabbitmqadmin list queues name
然后从列表中,您需要逐个手动删除它们:
rabbitmqadmin delete queue name='queuename'
由于输出格式,不会出现您可以从
list queues
grep响应 . 或者,如果您只是想要清除所有内容的方法(阅读: reset all settings ,将安装返回到默认状态),请使用:我创建了一个deleteRabbitMqQs.sh,它接受搜索队列列表的参数,只选择与你想要的模式匹配的参数 . 如果你不提供任何参数,它将全部删除它们!它会显示要删除的队列列表,让您在执行任何破坏性操作之前退出 .
如果要对传入的参数进行不同的匹配,可以在第4行中更改grep . 当删除所有队列时,它不会删除其中有三个连续空格的队列,因为我认为可能性比使用rabbitmqctl以不同语言打印输出的人更少 .
请享用!
如果're trying to delete queues because they'未使用且您不想重置,则一个选项是通过策略将队列TTL设置得非常低,等待TTL通过后自动删除队列,然后删除策略(https://www.rabbitmq.com/ttl.html) .
删除该政策
请注意,这仅适用于未使用的队列
原始信息:http://rabbitmq.1065348.n5.nabble.com/Deleting-all-queues-in-rabbitmq-td30933.html
如果您没有安装rabbitmqadmin,请尝试使用rabbitmqctl清除队列:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
这是使用PowerShell执行此操作的一种方法 . URL可能需要更新
Actually super easy with management plugin and policies:
转到 Management Console (localhost:15672)
转到 Admin 标签
转到 Policies 标签(右侧)
添加 Policy
填充字段
Virtual Host: 选择
Name: 使所有政策失效(稍后删除)
Pattern: . *
Apply to: 队列
Definition: expires ,其值为 1
保存
再次签出 Queues 标签
必须删除所有队列
And don't forget remove policy!!!!!! .
您可以使用rabbitmqctl eval,如下所示:
以上将删除所有名称以“prefix-”开头的vhost中的所有空队列 . 您可以根据需要编辑变量IfUnused,IfEmpty和MatchRegex .
使用rabbitmqctl one liner删除所有队列
如果您只想清除非空的队列(速度快得多):
对我来说,清除一个队列需要2-3秒(空的和非空的),所以迭代50个队列是一件很痛苦的事情,而我只需要清除其中的10个(40/50是空的) .
这是一个更快的版本(使用
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)
此命令将删除所有队列
此脚本非常简单,因为它使用
-f bash
,它将队列作为列表输出 .然后我们使用
xargs -n1
将其拆分为多个变量然后我们使用将运行以下命令的
xargs -I{}
,并在命令中替换{}
.您无需重置rabbitmq服务器以删除非持久队列 . 只需停止服务器并重新启动,它将删除所有可用的非持久队列 .
有一种方法可以在没有脚本和完全重置的情况下删除所有队列和交换 . 您只需从管理界面删除并重新创建虚拟主机即可 . 这甚至适用于vhost
/
.您需要还原的唯一内容是新创建的vhost的权限 .
好的,这个答案的重要限定符:问题确实要求使用 rabbitmqctl 或 rabbitmqadmin 来解决这个问题,我的答案需要同时使用 . 另请注意,这是在MacOS 10.12.6上测试的,以及在安装带有Homebrew的rabbitmq时安装的 rabbitmqctl 和 rabbitmqadmin 的版本,并且
brew list --versions
标识为 rabbitmq 3.7.0rabbitmqctl list_queues -p <VIRTUAL_HOSTNAME> name | sed 1,2d | xargs -I qname rabbitmqadmin --vhost <VIRTUAL_HOSTNAME> delete queue name=qname
我尝试了rabbitmqctl并重置命令,但它们非常慢 .
这是我找到的最快的方式(替换您的用户名和密码):
注意:这仅适用于默认的vhost /
列出队列,
要删除队列,