Excluir todas as filas do RabbitMQ?


188

Eu instalei rabbitmqadmine pude listar todas as trocas e filas. Como posso usar rabbitmqadminou rabbitmqctlexcluir todas as filas.

Respostas:


272

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

4
ver todas as tarefas pendentes em rabbitmq:rabbitmqctl list_queues name messages messages_ready \ messages_unacknowledged
Guillaume Vincent

2
Esteja ciente de que "rabbitmqctl reset" redefinirá tudo de volta às "configurações de fábrica". Quaisquer usuários RabbitMQ, hosts virtuais, etc, que você criou, serão surpreendidos.
thoufek

Desculpas @ smartnut007, esclareci a segunda parte da resposta com um aviso.
Lukiffer

24
apenas pegando as filas vazias. rabbitmqctl list_queues | grep 0 | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn
au_stan 24/06

4
@au_stan Isso excluirá todas as filas com um 0 no nome ou na contagem. Pode querer fazer grep $'\t0'ou algo assim.
woot

51

Com rabbitmqadminvocê 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

No meu caso, as filas são prefixadas com a palavra-chave pela qual eu posso simplesmente usar 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
Logans

47

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

    • Host virtual: selecione
    • Nome: Expirar todas as políticas (Excluir mais tarde)
    • Padrão:. *
    • Aplicar a: Filas
    • Definição: expira com o valor 1 (altere o tipo de String para Number)
  • Salve 

  • Guia Filas do Google Checkout novamente
  • Todas as filas devem ser excluídas
  • E não se esqueça de remover a política !!!!!! .

1
selecione "Número" em Definição. Não funciona com o padrão ("String")
Mathias

Ótima resposta, na verdade, compôs meu dia. Se você selecionar "Trocas e filas" na lista, poderá excluir facilmente ambas as filas e trocas. Eu gostaria que essa fosse a resposta aceita.
Wiktor Zychla

Solução muito limpa, sem a necessidade de brincar com a instância SSH.
acidburn23

Pity ninguém explica como instalar políticas de plugin gestão e
gelonida

@MesutA. Muito obrigado. Eu acho que é bom ter esse link neste artigo. Talvez seja ainda melhor adicioná-lo à resposta, pois os comentários podem ser removidos. Mas eu tenho agora, pelo menos esta informação
gelonida

19

Tente o seguinte:

 rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn

2
Isso funcionou para mim, mas também mostrou *** Not found: /api/queues/%2F/nameporque 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=qnpara corrigi-lo.
Mark Edington

rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
Scott Leonard

9

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


Não há delete_queuenem purge_queuecomandos rabbitmqctl. Gostaria de limpar um monte de filas que parecem ser gerados automaticamente e eu não gostaria de instalar software extra, como rabbitmqadmin...
Rolice

rabbitmqctl purge_queuetrabalhou aqui manualmente. Eu só precisava para adicionar -p <virtual-host>
Roman Susi

Ao contrário do que @Rolice dito acima, tanto delete_queuee purge_queueestão disponíveis em rabbitmqctle acabo de executá-los com sucesso. Talvez você esteja em uma versão antiga.
Richard Dunn

É bom saber que eles poderiam ter sido adicionados recentemente.
Rolice

6

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!


6

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


6

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

5

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)
 }

Observe que isso exclui apenas filas não vazias. Remova a cláusula -gt para excluir todas as filas
Peter Goodman

4

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.


Perfeito para quando rabbitmqadminnão estiver acessível.
NuSkooler

Achei isso muito mais rápido do que list_queues
TerrenceSun

3

Removendo todas as filas usando o liner rabbitmqctl one

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

2

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).


2

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 /


2

Para listar filas,

./rabbitmqadmin -f tsv -q list queues

Para excluir uma fila,

./rabbitmqadmin delete queue name=name_of_queue

1

Aqui está uma versão mais rápida (usando parallelinstall 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)


1

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 -n1para dividir isso em várias variáveis

Em seguida, usamos xargs -I{}o comando a seguir e o substituímos {}.


Eu tentei 10 respostas diferentes, e essa é a ÚNICA coisa que realmente funcionou para excluir filas sem matar todas as minhas outras configurações. Obrigado! Não acredito que rabbitmqctl não tenha apenas um comando "soltar todas as filas".
Sudo #

BTW, para obter rabbitmqadmin, você precisa acessar http://yourhost:15672/cli/e fazer o download.
Sudo #

1

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.


incluindo filas duráveis? Acho que não. Qualificarei sua resposta.
Hendy Irawan

Não, filas duráveis ​​não podem ser excluídas parando o servidor. Eles podem ser excluídos da interface da Web RabbitMQ Management em filas.
ErAcube

Na verdade, sim, isso me ajudou e todas as 4500 filas geradas automaticamente desapareceram. Parece que estes não eram duráveis. Obrigado!
Rolice

1

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

  1. Navegue até http://{hostname}:15672/cli/rabbitmqadmin fazer o download.
  2. Vá para a pasta que contém e execute o cmd com privilégio de administrador

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'

0

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.


0

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 --versionscomo 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


0

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-userslista de correspondência e, às vezes, responde a perguntas no StackOverflow.


0

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.


-1
rabbitmqadmin list queues|awk 'NR>3{print $4}'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname

1
Eu recebo isso ao executá-lo: head: contagem ilegal de linhas - -1
Robert Ross

O "head -n-1" deve ser "head -1" ou "head -n 1"
Gerd Busker
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.