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


当前回答

如果你没有安装rabbitmqadmin,尝试使用rabbitmqctl清除队列:

rabbitmqctl list_queues | awk '{print $1}' | xargs -L1 rabbitmqctl purge_queue . txt

其他回答

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

如https://stackoverflow.com/a/52002145/3278855

要实现自动化,可以使用curl:

curl -X PUT --data '{"pattern":".*","apply-to":"all","definition":{"expires":1},"priority":0}' -u guest:guest 'http://localhost:15672/api/policies/%2f/clear' && \
curl -X DELETE -u guest:guest 'http://localhost:15672/api/policies/%2f/clear'

请注意%2f是默认的v主机名(/),guest:guest是登录名:密码

要列出队列,

./rabbitmqadmin -f tsv -q list queues

要删除一个队列,

./rabbitmqadmin delete queue name=name_of_queue

我尝试了上面的代码段,但我没有做任何流。

Sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt;对于$(cat queue .txt)中的行;执行sudo rabbitmqctl delete_queue "$line";完成了。

我生成一个包含所有队列名称的文件,并逐行循环删除它们。对于循环,当读取…不是为了我。它总是在第一个队列名处停止。

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

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