Como excluo todas as mensagens de uma única fila usando a CLI?


142

Como faço para excluir todas as mensagens de uma única fila usando o cli? Eu tenho o nome da fila e quero limpá-lo.

Respostas:



140

você pode executar diretamente este comando

sudo rabbitmqctl purge_queue queue_name

15
ou, se você tem um host virtual, façarabbitmqctl purge_queue queue_name -p my_virt_host
cabra

4
execute sudo rabbitmqctl -h e verifique a lista de cammands listados pelo seu rabbitmq atual. se não estiver lá, significa que a versão atual do rabbitmq não suporta esse recurso.
Anurag jain

Isso não funcionou para mim - assim que meu consumidor foi acionado, a fila ainda estava cheia de tarefas.
21717 Jamie Ivanov

Isso poderia ter sido implementado no 3.5.4 ou 3.6.0, com base em github.com/rabbitmq/rabbitmq-server/pull/215 e rabbitmq.com/changelog.html . Se você possui uma versão mais antiga, o rabbitmqadmin conforme stackoverflow.com/a/18267342/272387 pode ajudar.
Richlv

1
... e, em github.com/rabbitmq/rabbitmq-server/releases/tag/… , esse recurso apareceu no 3.5.4.
Richlv 26/10

16

Para limpar a fila, você pode usar o seguinte comando (mais informações no documento da API):

curl -i -u guest:guest -XDELETE http://localhost:15672/api/queues/vhost_name/queue_name/contents

Meio assustador o quão bem isso funcionou. Alguma maneira de se proteger contra isso acontecer sem querer? Como uma configuração para servidores de produção que desativa essa funcionalidade para evitar perda acidental de dados?
Isaiah

Sim, a proteção seria excluir o usuário "guest" usando o comando "delete_user"
Ocean Airdrop

16

O RabbitMQ implementa o AMQP (Advanced Message Queuing Protocol) para que você possa usar ferramentas genéricas para coisas como esta.

No Debian / Ubuntu ou sistema similar, faça:

sudo apt-get install amqp-tools
amqp-delete-queue -q celery  # where celery is the name of the queue to delete

Essa é uma boa solução para algumas versões não possuem rabbitmqadmin.
23416 WisZhou

11
Isso exclui toda a fila, não apenas a limpa. Portanto, a fila não existe mais e você precisa reinicializar a fila vazia posteriormente.
krob

13

RabbitMQ tem 2 coisas na fila

  1. Excluir
  2. Purga

Excluir - excluirá a fila

Limpar - Isso esvaziará a fila (ou seja, remove as mensagens da fila, mas a fila ainda existe)


1
Pode parecer simples, mas esta era a resposta que eu precisava.
Nick Pickering

8

NOTA IMPORTANTE: Isso excluirá todos os usuários e configurações.

ALERTA !!

ALERTA !!

Eu não sugiro essa resposta até que você queira excluir dados de todas as filas, incluindo usuários e configurações. Apenas redefini-lo !!!

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

28
Isso também redefine seus usuários e outras configurações!
Codewithcheese 27/02

Eu usei isso como parte de testes de unidade. por exemplo, eu limpo tudo, depois configuro tudo programaticamente via stackoverflow.com/questions/4545660/… , preenche algumas mensagens e faço testes de caixa preta para garantir que as mensagens sejam transmitidas. Funciona muito bem para esse fim. :)
James Oravec

3
É realmente ingênuo. Não é aceitável como resposta a uma pergunta séria. Isso destruirá todos os dados do servidor.
Andre Pastore

2
zerar seu armazenamento e reinstalar o sistema operacional também se livra dos dados; este não é o OP está pedindo
istepaniuk

5

Eu acho que é tarde, mas para outras referências, isso pode ser feito com pika

import pika
host_ip = #host ip
channel = pika.BlockingConnection(pika.ConnectionParameters(host_ip,
                                                        5672,
                                                        "/",
credentials=pika.PlainCredentials("username","pwd"))).channel()
print "deleting queue..", channel.queue_delete(queue=queue_name)

1
oi @prajnavantha is pika tem algum método apenas mensagem clara? (não excluir fila)
Jade Han

2

Eu usei com sucesso ampq-purgedo amqp-utils para fazer isso:

git clone https://github.com/dougbarth/amqp-utils.git
cd amqp-utils
# extracted from Rakefile
echo "source 'https://rubygems.org'
gem 'amqp', '~> 0.7.1'
gem 'trollop', '~> 1.16.2'
gem 'facets', '~> 2.9'
gem 'clio', '~> 0.3.0'
gem 'json', '~> 1.5'
gem 'heredoc_unindent', '~> 1.1.2'
gem 'msgpack', '~> 0.4.5'" > Gemfile
bundle install --path=$PWD/gems
export RUBYLIB=.
export GEM_HOME=$PWD/gems/ruby/1.9.1

ruby bin/amqp-purge -v -V /vhost -u user -p queue
# paste password at prompt

2

Para excluir apenas as mensagens da fila, use:

sudo rabbitmqctl --node <nodename> purge_queue <queue_name>

Para excluir uma fila vazia ( --if-vazia ) ou sem consumidores ( --if-não utilizada ), use:

sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-empty

ou

sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-unused 
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.