我安装了 rabbitmqadmin
工具,并成功列出了所有的交换机和队列。请问,我该如何使用 rabbitmqadmin
或者 rabbitmqctl
删除所有的队列。
我安装了 rabbitmqadmin
工具,并成功列出了所有的交换机和队列。请问,我该如何使用 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
使用管理插件和策略非常简单:
进入管理控制台(localhost:15672)
点击管理员选项卡
点击右侧的策略选项卡
添加策略
填写字段
保存
再次查看队列选项卡
所有队列都必须被删除
不要忘记删除策略!
使用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
。 - Logansrabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
试一试:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
*** 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 Edingtonrabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
- Scott Leonard如果您没有安装rabbitmqadmin,可以尝试使用rabbitmqctl清除队列:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
rabbitmqctl
中没有 delete_queue
或 purge_queue
命令。我想清空许多似乎是自动生成的队列,但我不想安装额外的软件,如 rabbitmqadmin
... - Rolicerabbitmqctl purge_queue
在这里手动工作。我只需要添加 -p <虚拟主机>。 - Roman Susirabbitmqctl
中都提供了delete_queue
和purge_queue
,我刚刚成功地运行了它们。也许你使用的是旧版本。 - Richard Dunn如果你试图删除队列,因为它们没有使用而且你不想重置,一种选择是通过策略将队列的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
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"
以下是使用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)
}
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 ].'
rabbitmqadmin
不可用时非常适用。 - NuSkooler
rabbitmqctl list_queues name messages messages_ready messages_unacknowledged
- Guillaume Vincentrabbitmqctl list_queues | grep 0 | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn
命令来完成,该命令会列出所有队列并查找队列大小为零的队列,然后使用rabbitmqadmin delete queue
命令来删除这些空队列。 - au_stangrep $'\t0'
或类似方法。 - woot