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

소비자가 해고 되 자마자 대기열에는 여전히 작업이 가득했습니다.
Jamie Ivanov

이것은 github.com/rabbitmq/rabbitmq-server/pull/215rabbitmq.com/changelog.html 에 따라 3.5.4 또는 3.6.0에서 구현되었을 수 있습니다 . 이전 버전을 사용하는 경우 stackoverflow.com/a/18267342/272387에 따라 rabbitmqadmin 이 도움이 될 수 있습니다.
Richlv

1
... github.com/rabbitmq/rabbitmq-server/releases/tag/… 에서 확인 하면이 기능은 3.5.4에 나타났습니다.
Richlv

16

큐를 제거하려면 다음 명령을 사용할 수 있습니다 (API 문서의 추가 정보).

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

이것이 얼마나 잘 작동했는지 무섭습니다. 의도하지 않게이 문제를 방지 할 수있는 방법이 있습니까? 우발적 인 데이터 손실을 방지하기 위해이 기능을 비활성화하는 프로덕션 서버 구성과 같은가?
이사야

네, 보호는 "delete_user"명령을 사용하여 사용자 "게스트"삭제하는 것
오션 공중 투하

16

RabbitMQ는 AMQP (Advanced Message Queuing Protocol)를 구현하므로 이와 같은 일반적인 도구를 사용할 수 있습니다.

데비안 / 우분투 또는 이와 유사한 시스템에서 다음을 수행하십시오.

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

그것은 rabbitmqadmin이없는 일부 버전에 대한 좋은 해결책입니다.
WisZhou

11
이렇게하면 전체 대기열이 삭제되고 삭제되지는 않습니다. 따라서 대기열이 더 이상 존재하지 않으므로 나중에 빈 대기열을 다시 초기화해야합니다.
krob

13

RabbitMQ는 대기열에 두 가지가 있습니다.

  1. 지우다
  2. 숙청

삭제-대기열을 삭제합니다

제거-큐를 비 웁니다 (즉, 큐에서 메시지를 제거하지만 큐는 여전히 존재 함)


1
간단 해 보일지 모르지만 이것이 필요한 답이었습니다.
Nicholas Pickering

8

중요 참고 : 모든 사용자 및 구성이 삭제됩니다.

경고!

경고!

사용자와 구성을 포함하여 모든 대기열에서 데이터를 삭제하지 않는 한이 답변을 제안하지 않습니다. 그냥 재설정하십시오!

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

28
또한 사용자 및 다른 구성을 재설정합니다!
Codewithcheese

나는 이것을 단위 테스트의 일부로 사용했습니다. 예를 들어 모든 것을 지우고 stackoverflow.com/questions/4545660/… 을 통해 프로그래밍 방식으로 설정 한 다음 일부 메시지를 채우고 블랙 박스 테스트를 수행하여 메시지가 통과했는지 확인합니다. 이 목적에 적합합니다. :)
James Oravec 2016 년

3
정말 순진합니다. 심각한 질문에 대한 답변으로는 용납되지 않습니다. 모든 서버 데이터가 삭제됩니다.
Andre Pastore

2
스토리지를 0으로 설정하고 OS를 다시 설치하면 데이터가 제거됩니다. 이것은 OP가 요구하는 것이 아닙니다
istepaniuk

5

나는 늦었지만 다른 참조를 위해, pika로 할 수 있다고 생각합니다

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

amqp-utilsampq-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.