Respostas:
Se você não se preocupa com os dados no banco de dados de gerenciamento; ou seja users
, vhosts
, messages
etc., e nem sobre outra queues
, então você pode reset
via linha de comando, executando os seguintes comandos em ordem:
AVISO: Além das filas, isso também removerá todas as
users
evhosts
, você configurou em seu servidor RabbitMQ; e irá deletar qualquer persistentemessages
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
A documentação do rabbitmq diz que o reset
comando:
Retorna um nó RabbitMQ ao seu estado virgem.
Remove o nó de qualquer cluster ao qual pertença, remove todos os dados do banco de dados de gerenciamento, como usuários e vhosts configurados, e exclui todas as mensagens persistentes.
Portanto, tome cuidado ao usá-lo.
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(
'localhost'))
channel = connection.channel()
channel.queue_delete(queue='queue-name')
connection.close()
Instale o pacote pika como segue
$ sudo pip install pika==0.9.8
A instalação depende dos pacotes pip e git-core, você pode precisar instalá-los primeiro.
No Ubuntu:
$ sudo apt-get install python-pip git-core
No Debian:
$ sudo apt-get install python-setuptools git-core
$ sudo easy_install pip
No Windows: para instalar easy_install, execute o MS Windows Installer para ferramentas de configuração
> easy_install pip
> pip install pika==0.9.8
Nas versões RabbitMQ> 3.0, você também pode utilizar a API HTTP se o plugin rabbitmq_management estiver habilitado. Apenas certifique-se de definir o tipo de conteúdo como 'application / json' e fornecer o vhost e o nome da fila:
IE usando curl com um vhost 'test' e nome de fila 'testqueue':
$ curl -i -u guest:guest -H "content-type:application/json" -XDELETE http://localhost:15672/api/queues/test/testqueue
HTTP/1.1 204 No Content
Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue)
Date: Tue, 16 Apr 2013 10:37:48 GMT
Content-Type: application/json
Content-Length: 0
administrator
caso contrário, ele não poderá usar certas partes da API.
$ curl -i -u 'user:pass' -H "content-type:application/json" -XDELETE 'http://localhost:15672/api/queues/vhostname/name.portal' HTTP/1.1 204 No Content Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact) Date: Wed, 30 Jul 2014 11:23:47 GMT Content-Type: application/json Content-Length: 0
No entanto, a fila ainda permanece :( - alguma ideia?
Existe o rabbitmqadmin que é bom para trabalhar no console.
Se você efetuar ssh / logar no servidor onde instalou o rabbit, poderá baixá-lo em:
http://{server}:15672/cli/rabbitmqadmin
e salve-o em / usr / local / bin / rabbitmqadmin
Então você pode correr
rabbitmqadmin -u {user} -p {password} -V {vhost} delete queue name={name}
Normalmente, requer sudo.
Se você quiser evitar digitar seu nome de usuário e senha, você pode usar config
rabbitmqadmin -c /var/lib/rabbitmq/.rabbitmqadmin.conf -V {vhost} delete queue name={name}
Tudo isso supondo que você tenha o arquivo ** /var/lib/rabbitmq/.rabbitmqadmin.conf** e tenha o mínimo
hostname = localhost
port = 15672
username = {user}
password = {password}
EDITAR: A partir do comentário de @ user299709, pode ser útil apontar que o usuário deve ser marcado como 'administrador' no coelho. ( https://www.rabbitmq.com/management.html )
Você afirma que existe uma fila (e a cria se não existir) usando queue.declare . Se você configurou originalmente a exclusão automática para false, chamar queue.declare novamente com autodelete true resultará em um erro de software e o broker fechará o canal.
Você precisa usar queue.delete agora para excluí-lo.
Consulte a documentação da API para obter detalhes:
Se você usar outro cliente, precisará encontrar o método equivalente. Como faz parte do protocolo, deve estar lá e provavelmente faz parte do Canal ou equivalente.
Você também pode dar uma olhada no restante da documentação, em particular na seção Primeiros passos , que cobre muitos casos de uso comuns.
Finalmente, se você tem uma pergunta e não consegue encontrar a resposta em outro lugar, você deve tentar postar na lista de discussão RabbitMQ Discuss . Os desenvolvedores fazem o possível para responder a todas as perguntas feitas lá.
Um breve resumo para exclusão rápida da fila com todos os valores padrão do host que está executando o servidor RMQ:
curl -O http://localhost:15672/cli/rabbitmqadmin
chmod u+x rabbitmqadmin
./rabbitmqadmin delete queue name=myQueueName
Para excluir todas as filas que correspondem a um padrão em um determinado vhost (por exemplo, contendo 'amq.gen' no vhost raiz):
rabbitmqctl -p / list_queues | grep 'amq.gen' | cut -f1 -d$'\t' | xargs -I % ./rabbitmqadmin -V / delete queue name=%
Outra opção seria habilitar o management_plugin e conectar-se a ele por meio de um navegador. Você pode ver todas as filas e informações sobre elas. É possível e simples excluir filas desta interface.
Eu generalizei o método JavaScript / jQuery de Piotr Stapp um pouco mais, encapsulando-o em uma função e generalizando-o um pouco.
Esta função usa a API RabbitMQ HTTP para consultar as filas disponíveis em um determinado vhost
e excluí-las com base em um opcional queuePrefix
:
function deleteQueues(vhost, queuePrefix) {
if (vhost === '/') vhost = '%2F'; // html encode forward slashes
$.ajax({
url: '/api/queues/'+vhost,
success: function(result) {
$.each(result, function(i, queue) {
if (queuePrefix && !queue.name.startsWith(queuePrefix)) return true;
$.ajax({
url: '/api/queues/'+vhost+'/'+queue.name,
type: 'DELETE',
success: function(result) { console.log('deleted '+ queue.name)}
});
});
}
});
};
Depois de colar esta função no console JavaScript do seu navegador enquanto estiver na página de gerenciamento do RabbitMQ, você pode usá-la assim:
Exclua todas as filas em '/' vhost
deleteQueues('/');
Exclua todas as filas em '/' vhost começando com 'test'
deleteQueues('/', 'test');
Exclua todas as filas em 'dev' vhost começando com 'foo'
deleteQueues('dev', 'foo');
Use por sua própria conta e risco!
O plugin de gerenciamento (interface da web) fornece um link para um script python. Você pode usá-lo para excluir filas. Usei este padrão para remover muitas filas:
python tmp/rabbitmqadmin --vhost=... --username=... --password=... list queues > tmp/q
vi tmp/q # remove all queues which you want to keep
cut -d' ' -f4 tmp/q| while read q;
do python tmp/rabbitmqadmin --vhost=... --username=... --password=... delete queue name=$q;
done
Eu uso este alias em .profile
:
alias qclean="rabbitmqctl list_queues | python ~/bin/qclean.py"
onde qclean.py
tem o seguinte código:
import sys
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
queues = sys.stdin.readlines()[1:-1]
for x in queues:
q = x.split()[0]
print 'Deleting %s...' %(q)
channel.queue_delete(queue=q)
connection.close()
Essencialmente, esta é uma versão iterativa do código de Shweta B. Patil.
instalar
$ sudo rabbitmq-plugins enable rabbitmq_management
e vá para http: // localhost: 15672 / # / queues se estiver usando localhost. a senha padrão será username: guest
, password: guest
e vá para a guia filas e excluir a fila.
Espero que possa ajudar alguém.
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 de filas e faço um loop, linha por linha, para excluí-los. Para os loops, while read ...
não fez isso para mim. Ele sempre parava no primeiro nome da fila.
Além disso, se você deseja excluir uma única fila, as soluções acima irão ajudar (python, Java ...) e também do sudo rabbitmqctl delete_queue queue_name
. Estou usando em rabbitmqctl
vez de rabbitmqadmin
.
Com o plug-in rabbitmq_management instalado, você pode executá-lo para excluir todas as filas indesejadas:
rabbitmqctl list_queues -p vhost_name |\
grep -v "fast\|medium\|slow" |\
tr "[:blank:]" " " |\
cut -d " " -f 1 |\
xargs -I {} curl -i -u guest:guest -H "content-type:application/json" -XDELETE http://localhost:15672/api/queues/<vhost_name>/{}
Vamos quebrar o comando:
rabbitmqctl list_queues -p vhost_name
irá listar todas as filas e quantas tarefas eles têm atualmente.
grep -v "fast\|medium\|slow"
irá filtrar as filas que você não deseja excluir, digamos que queremos excluir todas as filas sem as palavras rápido , médio ou lento .
tr "[:blank:]" " "
irá normalizar o delimitador em rabbitmqctl entre o nome da fila e a quantidade de tarefas que existem
cut -d " " -f 1
irá dividir cada linha pelo espaço em branco e escolher a 1ª coluna (o nome da fila)
xargs -I {} curl -i -u guest:guest -H "content-type:application/json" -XDELETE http://localhost:15672/api/queues/<vhost>/{}
pegará o nome da fila e o definirá onde definimos o {}
caractere, excluindo todas as filas não filtradas no processo.
Certifique-se de que o usuário utilizado tenha permissões de administrador.
Fiz de forma diferente, pois só tinha acesso à página de gerenciamento. Criei um "snippet" simples que exclui filas em Javascript. Aqui está:
function zeroPad(num, places) {
var zero = places - num.toString().length + 1;
return Array(+(zero > 0 && zero)).join("0") + num;
}
var queuePrefix = "PREFIX"
for(var i=0; i<255; i++){
var queueid = zeroPad(i, 4);
$.ajax({url: '/api/queues/vhost/'+queuePrefix+queueid, type: 'DELETE', success: function(result) {console.log('deleted '+queuePrefix+queueid)}});
}
Todas as minhas filas estavam no formato: PREFIX_0001 a PREFIX_0XXX