Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否从RabbitMQ中删除所有队列?_Rabbitmq_Rabbitmqctl - Fatal编程技术网

是否从RabbitMQ中删除所有队列?

是否从RabbitMQ中删除所有队列?,rabbitmq,rabbitmqctl,Rabbitmq,Rabbitmqctl,我安装了rabbitmqadmin,能够列出所有的交换和队列。如何使用rabbitmqadmin或rabbitmqctl删除所有队列。首先,列出您的队列: rabbitmqadmin列表队列名称 然后,您需要从列表中逐个手动删除它们: rabbitmqadmin删除队列名称='queuename' 由于输出格式不显示,您可以从列表队列中grep响应。或者,如果您正在寻找清除所有内容的方法(请阅读:重置所有设置,将安装恢复到默认状态),请使用: 我制作了一个deleteRabbitMqQs.sh,

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

首先,列出您的队列:


rabbitmqadmin列表队列名称

然后,您需要从列表中逐个手动删除它们:

rabbitmqadmin删除队列名称='queuename'

由于输出格式不显示,您可以从
列表队列
中grep响应。或者,如果您正在寻找清除所有内容的方法(请阅读:重置所有设置,将安装恢复到默认状态),请使用:


我制作了一个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"
“$@中单词的
”
做
args=true
newQueues=$(rabbitmqctl列表|队列名称| grep“$word”)
queues=“$queues
$newQueues“
完成
如果[$#-eq 0];然后
队列=$(rabbitmqctl列表|队列名称| grep-v“\.\.\”)
fi
队列=$(回显“$queues”| sed'/^[:space:]*$/d')
如果[“x$queues”==“x”];然后
echo“没有要删除的队列,放弃。”
出口0
fi
阅读-p“删除以下队列:
${queues}
[CTRL+C退出|输入继续]
"
而read-r行;做
rabbitmqadmin delete queue name=“$line”

使用
rabbitmqadmin
完成,您可以使用以下一行代码删除它们:

rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done

下面是一种使用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)
 }
试试这个:

 rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
下面是一个更快的版本(使用
parallel
install sudo apt get install parallel),它扩展了@admenva的优秀答案


parallel-j50 rabbitmqadmin-H YOUR_HOST_或_LOCALHOST-q delete queue name={}:::$(rabbitmqadmin-H YOUR_HOST_或_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
将其分解为多个变量


然后我们使用将运行以下命令的
xargs-I{}
,并替换命令中的
{}

无需重置rabbitmq服务器即可删除非持久队列。只需停止服务器并重新启动,它将删除所有可用的非持久队列。

有一种方法可以在不使用脚本和完全重置的情况下删除所有队列和交换。您可以从管理界面删除并重新创建虚拟主机。这甚至适用于vhost
/


您唯一需要恢复的是新创建的vhost的权限。

如果您试图删除队列,因为它们未使用并且您不想重置,一个选项是通过策略将队列TTL设置得非常低,等待队列在TTL通过后自动删除,然后删除策略()

删除该策略

rabbitmqctl clear_policy delq
请注意,这仅适用于未使用的队列


此处的原始信息:

您可以使用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 ].' 
rabbitmqctl eval'IfUnused=false,IfEmpty=true,MatchRegex=

,[rabbit_amqqueue:delete(Q,如果未使用,如果为空)| | Q如果未安装rabbitmqadmin,请尝试使用rabbitmqctl清除队列:


rabbitmqctl列表| awk'{print$1}'| xargs-L1 rabbitmqctl清除|队列

好的,这个答案的重要限定词: 这个问题确实要求使用rabbitmqctlrabbitmqadmin来解决这个问题,我的答案需要同时使用这两种方法。另外,请注意,这是在MacOS 10.12.6和rabbitmqctlrabbitmqadmin版本上测试的,这些版本是在用自制软件安装rabbitmq时安装的,并且用
brew列表--versions
标识为rabbitmq 3.7.0
rabbitmqctl列表队列-p name | sed 1,2d | xargs-I qname rabbitmqadmin--vhost delete queue name=qname

使用rabbitmqctl一行程序删除所有队列

rabbitmqctl list_queues | awk '{ print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue

如果您只想清除非空队列(速度要快得多):


对我来说,清除一个队列(包括空队列和非空队列)需要2-3秒,所以遍历50个队列非常痛苦,而我只需要清除其中10个队列(40/50为空)。

我尝试了rabbitmqctl和reset命令,但速度非常慢

这是我找到的最快的方法(替换用户名和密码):


注意:这只适用于默认的vhost/

实际上非常容易使用和策略:

  • 转到管理控制台(本地主机:15672)

  • 转到管理选项卡

  • 转到策略选项卡(右侧)

  • 添加策略

  • 填充字段

    • 虚拟主机:选择
    • 名称:使所有策略过期(稍后删除)
    • 模式:*
    • 应用于:队列
    • 定义:过期值为1(将类型从字符串更改为数字)
  • 拯救

  • 再次签出队列选项卡

  • 必须删除所有队列

  • 不要忘记删除策略!!!!!

要列出队列

./rabbitmqadmin -f tsv -q list queues
要删除队列

./rabbitmqadmin delete queue name=name_of_queue

另一个选项是删除与队列相关联的vhost。这将删除与vhost相关联的所有内容,因此请注意,但这很简单且快速



注意:RabbitMQ团队监视并有时只回答有关StackOverflow的问题。

在Rabbit版本3.7.10中,您可以使用以下命令运行
rabbitmqctl list_queues | awk '{ print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
#!/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
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
python rabbitmqadmin declare policy name='expire_all_policies' pattern=.* definition={\"expires\":1} apply-to=queues
python rabbitmqadmin  delete policy name='expire_all_policies'