Як видалити всі повідомлення з однієї черги за допомогою 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.