CLI kullanarak tek bir kuyruktaki tüm iletileri nasıl silebilirim?


143

CLIP kullanarak tek bir kuyruktaki tüm iletileri nasıl silebilirim? Kuyruk ismim var ve temizlemek istiyorum.

Yanıtlar:


121

rabbitmqadmin bunun için mükemmel bir araçtır

rabbitmqadmin purge queue name=name_of_the_queue_to_be_purged

5
Rabbitmq kurulumumda aracı bulmakta zorlandım. Sonunda buradan indirdim
FactualHarmony

5
Yönetim eklentisini zaten yüklediyseniz, bunu indirebilirsinizhttp://rabbitserver:15672/cli/
morloch

141

bu komutu doğrudan çalıştırabilirsiniz

sudo rabbitmqctl purge_queue queue_name

15
Sanal bir konak varsa ya, dorabbitmqctl purge_queue queue_name -p my_virt_host
keçi

4
sudo rabbitmqctl -h komutunu çalıştırın ve mevcut rabbitmq tarafından listelenen cammand listesini kontrol edin. orada değilse, bu rabbitmq sürümünün bu özelliği desteklemediği anlamına gelir.
Anurag jain

Bu benim için işe yaramadı - tüketicim işten çıkar çıkmaz, kuyruk hala görevlerle doluydu.
Jamie Ivanov

Bu, github.com/rabbitmq/rabbitmq-server/pull/215 ve rabbitmq.com/changelog.html'ye göre 3.5.4 veya 3.6.0'da uygulanabilirdi . Eski bir sürümünüz varsa, stackoverflow.com/a/18267342/272387 uyarınca rabbitmqadmin yardımcı olabilir.
Richlv


16

Kuyruğu temizlemek için aşağıdaki komutu kullanabilirsiniz (API belgesinde daha fazla bilgi):

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

Bunun ne kadar iyi çalıştığı biraz korkutucu. İstenmeden buna karşı korunmanın herhangi bir yolu var mı? Kazara veri kaybını önlemek için bu işlevi devre dışı bırakan üretim sunucuları için bir yapılandırma gibi?
İşaya

Evet, koruma "
delete_user

16

RabbitMQ, Gelişmiş Message Queuing Protokolü'nü (AMQP) uygular, böylece böyle araçlar için genel araçlar kullanabilirsiniz.

Debian / Ubuntu veya benzeri bir sistemde şunları yapın:

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

Bu bazı versiyonlar için iyi bir çözüm rabbitmqadmin yok.
WisZhou

11
Bu, tüm kuyruğu siler, sadece temizlemekle kalmaz. Böylece kuyruk artık mevcut değil ve daha sonra boş kuyruğu yeniden başlatmanız gerekiyor.
krob

13

RabbitMQ kuyrukta 2 şey var

  1. Sil
  2. tasfiye

Sil - kuyruğu siler

Temizle - Bu, kuyruğu boşaltır (yani iletileri kuyruktan kaldırır, ancak kuyruk hala var)


1
Basit görünebilir, ama ihtiyacım olan cevap buydu.
Nick Pickering

8

ÖNEMLİ NOT: Bu işlem tüm kullanıcıları ve yapılandırmaları siler.

UYARMAK !!

UYARMAK !!

Kullanıcılar ve yapılandırmalar da dahil olmak üzere tüm kuyruklardan veri silmek istemedikçe bu yanıtı önermem. Sadece Sıfırla !!!

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

28
Bu ayrıca kullanıcılarınızı ve diğer yapılandırmaları sıfırlar!
Codewithcheese

Bunu birim testlerin bir parçası olarak kullandım. Örneğin, her şeyi temizlerim, sonra hepsini stackoverflow.com/questions/4545660/… aracılığıyla programlı olarak kurarım, ardından bazı iletileri doldurur ve iletilerin geçtiğinden emin olmak için kara kutu testi yaparım. Bu amaç için harika çalışıyor. :)
James Oravec

3
Gerçekten saf. Ciddi bir sorunun cevabı olarak kabul edilemez. Tüm sunucu verilerini yok edecektir.
Andre Pastore

2
depolama alanınızı sıfırlamak ve işletim sistemini yeniden yüklemek de verilerden kurtulur; OP'nin sorduğu şey bu değil
istepaniuk

5

Sanırım geç ama diğerleri referans için, bu pika ile yapılabilir

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
hi @prajnavantha pika herhangi bir yöntem var açık bir mesaj var mı? (sırayı silmez)
Jade Han

2

Ben başarıyla kullanmış ampq-purgegelen AMQP-utils bunu yapmak için:

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

Amacıyla için sadece mesajları silmek kuyruk kullanımından:

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

İçin bir sıra silme (boş --if boş ) veya (herhangi bir tüketici sahip --if-kullanılmayan ) kullanımı:

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

veya

sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-unused 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.