Respostas:
Primeiro, liste suas filas:
rabbitmqadmin list queues name
Em seguida, na lista, você deverá excluí-los manualmente, um por um:
rabbitmqadmin delete queue name='queuename'
Devido ao formato de saída, não aparece do qual você pode receber a resposta list queues
. Como alternativa, se você está apenas procurando uma maneira de limpar tudo (leia: redefinir todas as configurações , retornando a instalação ao estado padrão), use:
rabbitmqctl stop_app
rabbitmqctl reset # Be sure you really want to do this!
rabbitmqctl start_app
rabbitmqctl list_queues | grep 0 | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn
grep $'\t0'
ou algo assim.
Com rabbitmqadmin
você pode removê-los com este one-liner:
rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
egrep
, portanto, meu comando será parecido com este:rabbitmqadmin -f tsv -q list queues name | egrep "%search word%" | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
Na verdade, é super fácil com o plug - in e as políticas de gerenciamento :
Ir para o Console de Gerenciamento (localhost: 15672)
Saltar guia Admin
Guia Saltar Políticas (no lado direito)
Adicionar política
Campos de preenchimento
Salve
Tente o seguinte:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
*** Not found: /api/queues/%2F/name
porque a saída é uma tabela ASCII com uma coluna "nome". Apertei o comando rabbitmqadmin list queues name | awk '!/--|name/ {print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
para corrigi-lo.
rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
Se você não tiver o rabbitmqadmin instalado, tente limpar as filas com o rabbitmqctl:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
delete_queue
nem purge_queue
comandos rabbitmqctl
. Gostaria de limpar um monte de filas que parecem ser gerados automaticamente e eu não gostaria de instalar software extra, como rabbitmqadmin
...
rabbitmqctl purge_queue
trabalhou aqui manualmente. Eu só precisava para adicionar -p <virtual-host>
delete_queue
e purge_queue
estão disponíveis em rabbitmqctl
e acabo de executá-los com sucesso. Talvez você esteja em uma versão antiga.
Eu criei um deleteRabbitMqQs.sh, que aceita argumentos para pesquisar na lista de filas, selecionando apenas os que correspondem ao padrão desejado. Se você não oferecer argumentos, ele excluirá todos eles! Ele mostra a lista de filas que está prestes a excluir, permitindo que você saia antes de fazer qualquer coisa destrutiva.
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"
Se você quiser uma correspondência diferente com os argumentos passados, poderá alterar o grep na linha quatro. Ao excluir todas as filas, ele não excluirá aquelas com três espaços consecutivos, porque achei que a eventualidade seria mais rara do que as pessoas que têm o rabbitmqctl imprimindo sua saída em idiomas diferentes.
Aproveitar!
Se você está tentando excluir filas porque não são usadas e não deseja redefinir, uma opção é definir a TTL da fila muito baixa por meio de uma política, aguarde a exclusão automática das filas depois que o TTL for aprovado e remova a política ( https://www.rabbitmq.com/ttl.html ).
rabbitmqctl.bat set_policy delq ".*" '{"expires": 1}' --apply-to queues
Para remover a política
rabbitmqctl clear_policy delq
Note que isto só funciona para não utilizado filas
Informações originais aqui: http://rabbitmq.1065348.n5.nabble.com/Deleting-all-queues-in-rabbitmq-td30933.html
Na versão 3.7.10 do Rabbit, você pode executar o comando abaixo com permissão de root:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
Aqui está uma maneira de fazer isso com o PowerShell. o URL pode precisar ser atualizado
$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)
}
Você pode usar rabbitmqctl eval como abaixo:
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 ].'
O item acima excluirá todas as filas vazias em todos os vhosts que tenham um nome começando com "prefix-". Você pode editar as variáveis IfUnused, IfEmpty e MatchRegex conforme sua exigência.
rabbitmqadmin
não estiver acessível.
Caso você queira apenas limpar as filas que não estão vazias (muito mais rápido):
rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
Para mim, leva de 2 a 3 segundos para limpar uma fila (tanto vazias quanto não vazias), portanto, iterar através de 50 filas é uma dor, enquanto eu só preciso limpar 10 delas (40/50 estão vazias).
Eu tentei rabbitmqctl e redefinir comandos, mas eles são muito lentos.
Esta é a maneira mais rápida que encontrei (substitua seu nome de usuário e senha):
#!/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/@
Nota: Isso funciona apenas com o vhost padrão /
Para listar filas,
./rabbitmqadmin -f tsv -q list queues
Para excluir uma fila,
./rabbitmqadmin delete queue name=name_of_queue
Aqui está uma versão mais rápida (usando parallel
install sudo apt-get install parallel) expandindo a excelente resposta de @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)
Este comando exclui todas as suas filas
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={}
Esse script é super simples porque usa -f bash
, o que gera as filas como uma lista.
Então usamos xargs -n1
para dividir isso em várias variáveis
Em seguida, usamos xargs -I{}
o comando a seguir e o substituímos {}
.
http://yourhost:15672/cli/
e fazer o download.
Você precisa servidor RabbitMQ não redefinido para eliminar não-duráveis filas. Simplesmente pare o servidor e inicie novamente e ele removerá todas as filas não duráveis disponíveis.
Para quem tem um problema com a instalação do rabbitmqadmin, instale primeiro o python.
Os usuários do sistema operacional do tipo UNIX precisam copiar o rabbitmqadmin para um diretório no PATH, por exemplo, / usr / local / bin.
Os usuários do Windows precisarão garantir que o Python esteja em seu PATH e invocar rabbitmqadmin como python.exe rabbitmqadmin.
Então
http://{hostname}:15672/cli/rabbitmqadmin
fazer o download.Para listar filas
python rabbitmqadmin list queues
.
Para excluir a fila
python rabbitmqadmin delete queue name=Name_of_queue
Para excluir todas as filas
1- Declarar política
python rabbitmqadmin declare policy name='expire_all_policies' pattern=.* definition={\"expires\":1} apply-to=queues
2- Remova a política
python rabbitmqadmin delete policy name='expire_all_policies'
Existe uma maneira de remover todas as filas e trocas sem scripts e redefinição completa. Você pode simplesmente excluir e recriar um host virtual a partir da interface de administração. Isso funcionará mesmo para o vhost/
.
A única coisa que você precisará restaurar são as permissões para o vhost recém-criado.
Ok, qualificador importante para esta resposta: A pergunta pede para usar rabbitmqctl OU rabbitmqadmin para resolver isso, minha resposta precisava usar as duas. Além disso, observe que isso foi testado no MacOS 10.12.6 e nas versões do rabbitmqctl e rabbitmqadmin que são instaladas ao instalar o rabbitmq com o Homebrew e que é identificado brew list --versions
como rabbitmq 3.7.0
rabbitmqctl list_queues -p <VIRTUAL_HOSTNAME> name | sed 1,2d | xargs -I qname rabbitmqadmin --vhost <VIRTUAL_HOSTNAME> delete queue name=qname
Outra opção é excluir o vhost associado às filas. Isso excluirá tudo o que estiver associado ao vhost, portanto, seja avisado, mas é fácil e rápido.
OBSERVAÇÃO: a equipe RabbitMQ monitora a rabbitmq-users
lista de correspondência e, às vezes, responde a perguntas no StackOverflow.
Eu tentei os trechos de código acima, mas não fiz nenhum streaming.
sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do sudo rabbitmqctl delete_queue "$line"; done
.
Eu gero um arquivo que contém todos os nomes da fila e percorre linha por linha para excluí-los. Para os loops, while read ...
não fez isso por mim. Sempre estava parando no primeiro nome da fila.
rabbitmqadmin list queues|awk 'NR>3{print $4}'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname
rabbitmqctl list_queues name messages messages_ready \ messages_unacknowledged