我安装了rabbitmqadmin,并且能够列出所有的交换机和队列。如何使用rabbitmqadmin或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

其他回答

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

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

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

使用rabbitmqadmin,你可以用下面的一行程序删除它们:

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

我尝试了rabbitmqctl和reset命令,但它们非常慢。

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

#!/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/@

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

下面是一个更快的版本(使用并行安装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 queue name)