Удаление очередей в RabbitMQ - PullRequest
84 голосов
/ 19 июля 2011

У меня есть несколько очередей, запущенных с RabbitMQ.Некоторые из них сейчас бесполезны, как я могу их удалить?К сожалению, я не установил параметр auto_delete.

Если я установлю его сейчас, он будет удален?

Есть ли способ удалить эти очереди сейчас?

Ответы [ 14 ]

4 голосов
/ 24 ноября 2017

установка

$ sudo rabbitmq-plugins enable rabbitmq_management

и перейдите к http://localhost:15672/#/queues, если вы используете localhost. пароль по умолчанию будет username: guest, password: guest и перейдите на вкладку очереди и удалите очередь.

4 голосов
/ 18 октября 2016

С установленным плагином rabbitmq_management вы можете запустить его, чтобы удалить все нежелательные очереди:

rabbitmqctl list_queues -p vhost_name |\
grep -v "fast\|medium\|slow" |\
tr "[:blank:]" " " |\
cut -d " " -f 1 |\
xargs -I {} curl -i -u guest:guest -H "content-type:application/json" -XDELETE http://localhost:15672/api/queues/<vhost_name>/{}

Давайте разберем команду:

rabbitmqctl list_queues -p vhost_name перечислит все очереди и сколько заданий у них в данный момент.

grep -v "fast\|medium\|slow" отфильтрует очереди, которые вы не хотите удалять, скажем, мы хотим удалить каждую очередь без слов fast , medium или slow .

tr "[:blank:]" " " нормализует разделитель на rabbitmqctl между именем очереди и количеством заданий

cut -d " " -f 1 будет разбивать каждую строку по пробелам и выбирать 1-й столбец (имя очереди)

xargs -I {} curl -i -u guest:guest -H "content-type:application/json" -XDELETE http://localhost:15672/api/queues/<vhost>/{} выберет имя очереди и установит его там, где мы установили символ {}, удалив все очереди, не отфильтрованные в процессе.

Убедитесь, что использованный пользователь имеет права администратора.

2 голосов
/ 25 июля 2014

Я сделал это по-другому, потому что у меня был только доступ к веб-странице управления. Я создал простой «фрагмент», который удаляет очереди в Javascript. Вот оно:

function zeroPad(num, places) {
  var zero = places - num.toString().length + 1;
  return Array(+(zero > 0 && zero)).join("0") + num;
}
var queuePrefix = "PREFIX"
for(var i=0; i<255; i++){ 
   var queueid = zeroPad(i, 4);
   $.ajax({url: '/api/queues/vhost/'+queuePrefix+queueid, type: 'DELETE', success: function(result) {console.log('deleted '+queuePrefix+queueid)}});
}

Все мои очереди были в формате: от PREFIX_0001 до PREFIX_0XXX

1 голос
/ 24 апреля 2019

Надеюсь, это может кому-то помочь.

Я пробовал приведенные выше фрагменты кода, но я не выполнял потоковую передачу.

sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do sudo rabbitmqctl delete_queue "$line"; done.

Я создаю файл, который содержит все имена очередей, и проходит черезэто строка за строкой, чтобы удалить их.Для циклов while read ... не сделал это для меня.Он всегда останавливался на первом имени очереди.

Кроме того, если вы хотите удалить одну очередь, помогут вышеуказанные решения (python, Java ...), а также do sudo rabbitmqctl delete_queue queue_name.Я использую rabbitmqctl вместо rabbitmqadmin.

...