CLIを使用して単一のキューからすべてのメッセージを削除するにはどうすればよいですか?


142

CLIを使用して単一のキューからすべてのメッセージを削除するにはどうすればよいですか?キュー名がわかっているので、それをクリーンアップします。

回答:



140

このコマンドを直接実行できます

sudo rabbitmqctl purge_queue queue_name

15
または、仮想ホストを使用している場合は、次のようにしますrabbitmqctl purge_queue queue_name -p my_virt_host
ヤギ

4
sudo rabbitmqctl -hを実行し、現在のrabbitmqによってリストされているcammandのリストを確認します。存在しない場合、rabbitmqの現在のバージョンはこの機能をサポートしていません。
Anurag jain

これは私にはうまくいきませんでした-私の消費者が起動するとすぐに、キューはまだタスクでいっぱいでした。
ジェイミーイワノフ

これは、github.com / rabbitmq / rabbitmq- server / pull / 215およびrabbitmq.com/changelog.htmlに基づいて、3.5.4または3.6.0で実装されている可能性があります。古いバージョンを使用している場合は、stackoverflow.com / a / 18267342/272387のrabbitmqadmin が役立つ場合があります。
Richlv 2017年

1
...そしてgithub.com/rabbitmq/rabbitmq-server/releases/tag/…をチェックすると、この機能は3.5.4で登場しました。
Richlv 2017年

16

キューを削除するには、次のコマンドを使用できます(APIドキュメントの詳細)。

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

これがどれほどうまくいったか怖い。これが意図せずに発生するのを防ぐ方法はありますか?偶発的なデータ損失を防ぐためにこの機能を無効にする運用サーバーの構成などですか?
イザヤ、

ええ、保護は「delete_user」コマンドを使用してユーザー「guest」を削除することです
Ocean Airdrop

16

RabbitMQはAdvanced Message Queuing Protocol(AMQP)を実装しているため、このようなものに汎用ツールを使用できます。

Debian / Ubuntuまたは同様のシステムでは、次のようにします。

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

これは、rabbitmqadminがないバージョンの良い解決策です。
WisZhou 2016年

11
これはキュー全体を削除し、単にそれをパージするだけではありません。そのため、キューはもう存在せず、後で空のキューを再初期化する必要があります。
クローブ2016年

13

RabbitMQは2つのものを待ち行列に入れています

  1. 削除する
  2. パージ

削除-キューを削除します

パージ-キューを空にします(キューからメッセージを削除しますが、キューはまだ存在します)


1
シンプルに見えるかもしれませんが、これが私が必要とした答えです。
ニコラスピカリング

8

重要な注意:これにより、すべてのユーザーと構成が削除されます。

アラート!!

アラート!!

ユーザーと構成を含むすべてのキューからデータを削除するまで、この回答はお勧めしません。リセットするだけです!!!

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

28
これにより、ユーザーやその他の設定もリセットされます。
Codewithcheese 2015

これを単体テストの一部として使用しました。たとえば、すべてをクリアしてから、プログラムでstackoverflow.com/questions/4545660/を介してすべてを設定します。次に、いくつかのメッセージを入力し、ブラックボックステストを実行してメッセージが通過したことを確認します。この目的に最適です。:)
James Oravec 2015年

3
それは本当に素朴です。深刻な質問への回答としては認められません。それはすべてのサーバーデータを破壊します。
Andre Pastore

2
ストレージをゼロにし、OSを再インストールすると、データも削除されます。これはOPが要求するものではありません
istepaniuk

5

私はそれが遅いと思いますが、他の参考のために、これはピカで行うことができます

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
こんにちは@prajnavantha is pikaはメソッドをクリアするメッセージしかありませんか?(キューを削除しない)
Jade Han

2

amqp-utilsからこれを正常に使用ampq-purgeました

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

キューからメッセージのみ削除するには、以下を使用します。

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

空のキュー--if-empty)またはコンシューマーのないキュー--if-unused)を削除するには、以下を使用します。

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

または

sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-unused 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.