Як видалити всі повідомлення з однієї черги за допомогою CLI?


142

Як видалити всі повідомлення з однієї черги за допомогою кліпу? У мене є черга і я хочу її очистити.

Відповіді:


121

rabbitmqadmin - ідеальний інструмент для цього

rabbitmqadmin purge queue name=name_of_the_queue_to_be_purged

5
Мені важко було знайти інструмент у моїй установці rabbitmq. Нарешті я завантажив його звідси: hg.rabbitmq.com/rabbitmq-management/raw-file/rabbitmq_v3_3_5/…
FactualHarmony

5
Якщо у вас вже встановлений плагін управління, ви можете завантажити його зhttp://rabbitserver:15672/cli/
morloch

140

Ви можете безпосередньо запустити цю команду

sudo rabbitmqctl purge_queue queue_name

15
або, якщо у вас є віртуальний хост, зробітьrabbitmqctl purge_queue queue_name -p my_virt_host
коза

4
запустіть sudo rabbitmqctl -h і перевірте список камер, перелічених вашим поточним rabbitmq. якщо його немає, це означає, що поточна версія rabbitmq не підтримує цю функцію.
Anurag jain

Це не спрацювало для мене - як тільки мій споживач загорівся, у черзі все ще було повно завдань.
Джеймі Іванов

Це могло бути реалізовано в 3.5.4 або 3.6.0 на основі github.com/rabbitmq/rabbitmq-server/pull/215 та rabbitmq.com/changelog.html . Якщо у вас старіша версія, rabbitmqadmin як на stackoverflow.com/a/18267342/272387 може допомогти.
Richlv

1
... і перевіривши в github.com/rabbitmq/rabbitmq-server/releases/tag/… , ця функція з’явилася в 3.5.4.
Richlv

16

Для очищення черги можна використовувати таку команду (більше інформації в API doc):

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

Страшно, як добре це спрацювало. Будь-який спосіб захиститись від того, щоб це сталося ненавмисно? Наприклад, конфігурація виробничих серверів, яка відключає цю функціональність, щоб запобігти випадковій втраті даних?
Ісая

Так, захистом буде видалення користувача "гостя" за допомогою команди "delete_user"
Ocean Airdrop

16

RabbitMQ реалізує протокол розширеної черги повідомлень (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

11
Це видаляє всю чергу, а не просто очищає її. Таким чином, черги більше не існує, і вам доведеться повторно ініціалізувати порожню чергу після цього.
кроб

13

RabbitMQ у черзі 2 речі

  1. Видалити
  2. Чистка

Видалити - видалить чергу

Чистка - це спорожнить чергу (тобто видалення повідомлень із черги, але черга все ще існує)


1
Це може здатися простим, але це була потрібна мені відповідь.
Микола Пікерінг

8

ВАЖЛИВА ПРИМІТКА. Це видалить усіх користувачів та конфігурацію.

АЛЕРАТ !!

АЛЕРАТ !!

Я не пропоную цю відповідь, поки ви не захочете видалити дані з усіх черг, включаючи користувачів та конфігурації. Просто скиньте його !!!

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

28
Це також скидає ваших користувачів та інші налаштування!
Codewithcheese

Я використовував це як частину тестів. наприклад, я все очищую, а потім налаштовую все це програмно за допомогою stackoverflow.com/questions/4545660/…, потім заповнюю деякі повідомлення та робіть тестування чорного поля, щоб переконатися, що повідомлення пройшли. Для цього чудово працює. :)
Джеймс Оравець

3
Це дійсно наївно. Це не прийнятно як відповідь на серйозне запитання. Це знищить усі дані сервера.
Андре Пасторе

2
нульове зберігання та перевстановлення ОС також позбавляється від даних; це не те, що просять ОП
istpaniuk

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 є pika має будь-який метод чіткого повідомлення тільки? (не видаляти чергу)
Jade Han

2

Я успішно використовував ampq-purgeвід AMQP-утилітами , щоб зробити це:

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-порожня ) або не має споживачів ( --fi-невикористаний ), використовуйте:

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

або

sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-unused 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.