RabbitMQ에서 모든 대기열을 삭제 하시겠습니까?


188

rabbitmqadmin모든 교환 및 대기열을 설치 하고 나열 할 수있었습니다. 모든 대기열을 사용 rabbitmqadmin하거나 rabbitmqctl삭제하려면 어떻게해야합니까 ?

답변:


271

먼저 대기열을 나열하십시오.

rabbitmqadmin list queues name

그런 다음 목록에서 하나씩 수동으로 삭제해야합니다.

rabbitmqadmin delete queue name='queuename'

출력 형식으로 인해에서 응답을 grep 할 수 없습니다 list queues. 또는 모든 것을 지우는 방법을 찾고 있다면 (읽기 : 모든 설정 재설정 , 설치를 기본 상태로 되돌리기) 다음을 사용하십시오.

rabbitmqctl stop_app
rabbitmqctl reset    # Be sure you really want to do this!
rabbitmqctl start_app

4
rabbitmq의 모든 보류중인 작업을 보려면 :rabbitmqctl list_queues name messages messages_ready \ messages_unacknowledged
Guillaume Vincent

2
"rabbitmqctl reset"은 모든 것을 "공장 설정"으로 재설정 합니다. 생성 한 RabbitMQ 사용자, 가상 호스트 등이 모두 사라집니다.
thoufek

사과 @ smartnut007, 나는 고지 사항으로 대답의 두 번째 부분을 명확히했습니다.
lukiffer

24
빈 줄을 잡아 rabbitmqctl list_queues | grep 0 | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn
au_stan

4
@au_stan 이름이나 개수가 0 인 모든 대기열을 삭제합니다. 하고 싶 grep $'\t0'거나 할 수 있습니다.
woot

51

으로 rabbitmqadmin당신이 한 줄에 제거 할 수 있습니다 :

rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done

필자의 경우 대기열에는 키워드를 접두어로 사용하여 간단히 사용할 수 egrep있으므로 내 명령은 다음과 같습니다.rabbitmqadmin -f tsv -q list queues name | egrep "%search word%" | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
Logans

48

관리 플러그인 및 정책으로 실제로 매우 쉽습니다 .

  • Goto 관리 콘솔 (localhost : 15672)

  • 고토 관리자

  • Goto Policies ( 고토 정책) 탭 (오른쪽)

  • 정책 추가

  • 필드 채우기

    • 가상 호스트 : 선택
    • 이름 : 모든 정책 만료 (나중에 삭제)
    • 패턴 : . *
    • 적용 : 대기열
    • 정의 :1로 만료 (유형을 문자열에서 숫자로 변경)
  • 저장

  • 결제 대기열 탭을 다시
  • 모든 대기열을 삭제해야합니다
  • 그리고 정책 제거를 잊지 마세요 !!!!!! .

1
정의에서 "번호"를 선택하십시오. 기본 ( "문자열")에서 작동하지 않음
Mathias

큰 대답은 실제로 내 하루를 구성했습니다. 목록에서 "교환 및 대기열"을 선택하면 대기열과 교환을 쉽게 삭제할 수 있습니다. 이것이 받아 들일만한 대답이 되길 바랍니다.
Wiktor Zychla

인스턴스 SSH를 재생할 필요없이 매우 깨끗한 솔루션입니다.
acidburn23

Pity nobody는 관리 플러그인과 정책을 설치하는 방법을 설명하지 않습니다
gelonida

@MesutA. 고마워 나는이 기사 에서이 링크를 갖는 것이 좋다고 생각합니다. 주석이 제거 될 수 있으므로 답변에 추가하는 것이 더 좋습니다. 하지만 지금은 적어도이 정보를 가지고 있습니다
적어도이

19

이 시도:

 rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn

2
이것은 나를 위해 일했지만 *** Not found: /api/queues/%2F/name출력이 "이름"열이있는 ASCII 테이블이기 때문에 나타났습니다 . 나는 명령 rabbitmqadmin list queues name | awk '!/--|name/ {print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn을 수정하도록 수정했다.
Mark Edington

rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
Scott Leonard

9

rabbitmqadmin이 설치되어 있지 않은 경우 rabbitmqctl로 대기열을 제거하십시오.

rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue


에 명령 delete_queue도 없습니다 . 자동으로 생성되는 것처럼 보이는 많은 큐를 제거하고 싶습니다 . 다음 과 같은 추가 소프트웨어를 설치하고 싶지 않습니다 .purge_queuerabbitmqctlrabbitmqadmin
Rolice

rabbitmqctl purge_queue여기서 수동으로 작업했습니다. -p <virtual-host>
Roman Susi

@Rolice는 위에서 언급 한 두 것과는 달리 delete_queue하고 purge_queue사용할 수 있습니다 rabbitmqctl난 그냥 성공적으로 실행했습니다. 아마도 당신은 구버전 일 것입니다.
Richard Dunn

유감스럽게도 최근에 추가되었을 수 있습니다.
Rolice

7

대기열이 사용되지 않아서 삭제하지 않으려는 경우 대기열을 삭제하려는 경우, 정책을 통해 대기열 TTL을 매우 낮게 설정하고, TTL이 통과되면 대기열이 자동 삭제 될 때까지 기다리십시오. 그런 다음 정책을 제거하십시오 ( https://www.rabbitmq.com/ttl.html ).

rabbitmqctl.bat set_policy delq ".*" '{"expires": 1}' --apply-to queues

정책을 제거하려면

rabbitmqctl clear_policy delq

이것은 사용하지 않는 경우에만 작동합니다. 대기열

원래 정보는 여기 : http://rabbitmq.1065348.n5.nabble.com/Deleting-all-queues-in-rabbitmq-td30933.html


6

deleteRabbitMqQs.sh를 작성했습니다.이 인수는 원하는 목록과 일치하는 대기열 만 선택하여 대기열 목록을 검색하는 인수를 허용합니다. 인수를 제공하지 않으면 모두 삭제됩니다! 삭제하려고하는 대기열의 목록을 보여 주므로 파괴적인 작업을하기 전에 종료 할 수 있습니다.

for word in "$@"
do
        args=true
        newQueues=$(rabbitmqctl list_queues name | grep "$word")
        queues="$queues
$newQueues"
done
if [ $# -eq 0 ]; then
        queues=$(rabbitmqctl list_queues name | grep -v "\.\.\.")
fi

queues=$(echo "$queues" | sed '/^[[:space:]]*$/d')

if [ "x$queues" == "x" ]; then
        echo "No queues to delete, giving up."
        exit 0
fi

read -p "Deleting the following queues:
${queues}
[CTRL+C quit | ENTER proceed]
"

while read -r line; do
        rabbitmqadmin delete queue name="$line"
done <<< "$queues"

전달한 인수에 대해 다른 일치를 원하면 4 행에서 grep을 변경할 수 있습니다. 모든 큐를 삭제할 때 연속 된 공백이 3 개인 큐는 삭제되지 않습니다. 왜냐하면 다른 언어로 출력을 출력하는 rabbitmqctl을 가진 사람들보다 드문 경우 일 것입니다.

즐겨!


6

Rabbit 버전 3.7.10에서는 루트 권한으로 아래 명령을 실행할 수 있습니다.

rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue

5

다음은 PowerShell을 사용하여 수행하는 방법입니다. URL을 업데이트해야 할 수도 있습니다

$cred = Get-Credential
 iwr -ContentType 'application/json' -Method Get -Credential $cred   'http://localhost:15672/api/queues' | % { 
    ConvertFrom-Json  $_.Content } | % { $_ } | ? { $_.messages -gt 0} | % {
    iwr  -method DELETE -Credential $cred  -uri  $("http://localhost:15672/api/queues/{0}/{1}" -f  [System.Web.HttpUtility]::UrlEncode($_.vhost),  $_.name)
 }

비어 있지 않은 큐만 삭제합니다. 모든 큐를 삭제하려면 -gt 절을 제거하십시오
Peter Goodman

4

아래와 같이 rabbitmqctl eval을 사용할 수 있습니다 :

rabbitmqctl eval 'IfUnused = false, IfEmpty = true, MatchRegex = 
<<"^prefix-">>, [rabbit_amqqueue:delete(Q, IfUnused, IfEmpty) || Q <- 
rabbit_amqqueue:list(), re:run(element(4, element(2, Q)), MatchRegex) 
=/= nomatch ].' 

위의 이름은 "prefix-"로 시작하는 이름을 가진 모든 호스트에서 비어있는 모든 대기열을 삭제합니다. 요구 사항에 따라 변수 IfUnused, IfEmpty 및 MatchRegex를 편집 할 수 있습니다.


rabbitmqadmin액세스 할 수없는 경우 에 적합합니다.
NuSkooler

나는 이것이 list_queues보다 훨씬 더 빠르다는 것을 발견했다
TerrenceSun

3

rabbitmqctl one liner를 사용하여 모든 대기열 제거

rabbitmqctl list_queues | awk '{ print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue

2

비어 있지 않은 큐를 제거하려는 경우 (더 빠름) :

rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue

나를 위해 대기열을 비우는 데 2-3 초가 걸리므로 (빈 비 비어 있지 않은 큐 모두) 50 개의 큐를 반복하는 것은 고통 스럽지만 10 개를 비우면됩니다 (40/50은 비어 있습니다).


2

rabbitmqctl을 시도하고 명령을 재설정했지만 매우 느립니다.

이것이 내가 찾은 가장 빠른 방법입니다 (사용자 이름과 비밀번호를 바꾸십시오).

#!/bin/bash

# Stop on error
set -eo pipefail

USER='guest'
PASSWORD='guest'

curl -sSL -u $USER:$PASSWORD http://localhost:15672/api/queues/%2f/ | jq '.[].name' | sed 's/"//g' | xargs -L 1 -I@ curl -XDELETE -sSL -u $USER:$PASSWORD http://localhost:15672/api/queues/%2f/@
# To also delete exchanges uncomment next line
# curl -sSL -u $USER:$PASSWORD http://localhost:15672/api/exchanges/%2f/ | jq '.[].name' | sed 's/"//g' | xargs -L 1 -I@ curl -XDELETE -sSL -u $USER:$PASSWORD http://localhost:15672/api/exchanges/%2f/@

참고 : 이것은 기본 vhost /에서만 작동합니다



1

parallel@admenva의 탁월한 답변으로 확장 되는 더 빠른 버전 ( install sudo apt-get install parallel 사용)

parallel -j 50 rabbitmqadmin -H YOUR_HOST_OR_LOCALHOST -q delete queue name={} ::: $(rabbitmqadmin -H YOUR_HOST_OR_LOCALHOST -f tsv -q list queues name)


1

이 명령은 모든 대기열을 삭제합니다

python rabbitmqadmin.py \
  -H YOURHOST -u guest -p guest -f bash list queues | \
xargs -n1 | \
xargs -I{} \
  python rabbitmqadmin.py -H YOURHOST -u guest -p guest delete queue name={}

이 스크립트는 -f bash큐를 목록으로 출력하는을 사용하기 때문에 매우 간단 합니다.

그런 다음 xargs -n1여러 변수로 나누는 데 사용 합니다

그런 다음이를 사용 xargs -I{}하여 다음 명령을 실행하고 명령을 {}바꿉니다.


나는 10 가지 다른 답변을 시도했지만 이것은 실제로 다른 모든 설정을 죽이지 않고 대기열을 삭제하기 위해 노력한 유일한 방법입니다. 감사! rabbitmqctl에 "drop all queues"명령 만있는 것은 아닙니다.
sudo

BTW, rabbitmqadmin을 얻으려면 가서 http://yourhost:15672/cli/다운로드해야합니다.
sudo

1

지속 불가능한 큐 를 삭제하기 위해 rabbitmq 서버를 재설정 할 필요는 없습니다 . 서버를 중지하고 다시 시작하면 사용 가능한 모든 비 지속적 큐 가 제거 됩니다.


내구성있는 대기열을 포함하여? 나는 그렇게 생각하지 않습니다. 나는 당신의 답변을받을 것입니다.
Hendy Irawan

서버를 중지하여 지속 가능한 큐를 삭제할 수 없습니다. 대기열의 RabbitMQ Management 웹 인터페이스에서 삭제할 수 있습니다.
ErAcube

실제로 그렇습니다. 이것은 나에게 도움이되었으며 약 4500 개의 자동 생성 대기열이 사라졌습니다. 이것들은 내구성이없는 것 같습니다. 감사!
Rolice

1

rabbitmqadmin 설치에 문제가있는 사용자는 먼저 python을 설치해야합니다.

UNIX와 같은 운영 체제 사용자는 rabbitmqadmin을 PATH의 디렉토리 (예 : / usr / local / bin)에 복사해야합니다.

Windows 사용자는 Python이 해당 경로에 있는지 확인하고 rabbitmqadmin을 python.exe rabbitmqadmin으로 호출해야합니다.

그때

  1. http://{hostname}:15672/cli/rabbitmqadmin다운로드 하여 찾아보십시오 .
  2. 포함 폴더로 이동 한 다음 관리자 권한으로 cmd를 실행하십시오.

대기열을 나열하려면 python rabbitmqadmin list queues .

대기열을 삭제하려면 python rabbitmqadmin delete queue name=Name_of_queue

모든 대기열을 삭제하려면

1- 정책 선언

python rabbitmqadmin declare policy name='expire_all_policies' pattern=.* definition={\"expires\":1} apply-to=queues

2- 정책 제거

python rabbitmqadmin  delete policy name='expire_all_policies'

0

스크립트와 전체 재설정없이 모든 대기열과 교환을 제거하는 방법이 있습니다. 관리자 인터페이스에서 가상 호스트를 삭제하고 다시 만들 수 있습니다. 이것은 vhost에서도 작동 /합니다.

복원해야 할 유일한 것은 새로 생성 된 가상 호스트에 대한 권한입니다.


0

좋아,이 대답에 대한 중요한 한정자 : 질문은 rabbitmqctl 또는 rabbitmqadmin 을 사용 하여이 문제를 해결 하도록 요청 합니다. 제 대답은 두 가지를 모두 사용해야했습니다. 또한 MacOS 10.12.6 및 Homebrew와 rabbitmq를 설치할 때 설치 되고 rabbitmq 3.7.0 으로 식별되는 rabbitmqctlrabbitmqadmin 버전에서 테스트되었습니다.brew list --versions

rabbitmqctl list_queues -p <VIRTUAL_HOSTNAME> name | sed 1,2d | xargs -I qname rabbitmqadmin --vhost <VIRTUAL_HOSTNAME> delete queue name=qname


0

다른 옵션은 대기열과 관련된 가상 호스트를 삭제하는 것입니다. 이렇게하면 가상 호스트와 관련된 모든 내용 이 삭제 되므로주의해야하지만 쉽고 빠릅니다.


참고 : RabbitMQ 팀 rabbitmq-users메일 링리스트를 모니터링 하고 때때로 StackOverflow에 대한 질문에만 답변합니다.


0

위의 코드를 시도했지만 스트리밍을 수행하지 않았습니다.

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

모든 대기열 이름이 포함 된 파일을 생성하고 한 줄씩 반복하여 삭제합니다. 루프의 경우 while read ...나를 위해하지 않았습니다. 항상 첫 번째 큐 이름에서 중지되었습니다.


-1
rabbitmqadmin list queues|awk 'NR>3{print $4}'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname

1
이것을 실행할 때 이것을받습니다 : head : 불법 라인 수
Robert Ross

은 "머리 -n-1", "1 -n 머리"중 "머리 -1"또는이어야한다
게르트 버스 커버
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.