답변:
먼저 대기열을 나열하십시오.
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
rabbitmqctl list_queues | grep 0 | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn
grep $'\t0'
거나 할 수 있습니다.
으로 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
관리 플러그인 및 정책으로 실제로 매우 쉽습니다 .
Goto 관리 콘솔 (localhost : 15672)
고토 관리자 탭
Goto Policies ( 고토 정책) 탭 (오른쪽)
정책 추가
필드 채우기
저장
이 시도:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
*** Not found: /api/queues/%2F/name
출력이 "이름"열이있는 ASCII 테이블이기 때문에 나타났습니다 . 나는 명령 rabbitmqadmin list queues name | awk '!/--|name/ {print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
을 수정하도록 수정했다.
rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
rabbitmqadmin이 설치되어 있지 않은 경우 rabbitmqctl로 대기열을 제거하십시오.
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
delete_queue
도 없습니다 . 자동으로 생성되는 것처럼 보이는 많은 큐를 제거하고 싶습니다 . 다음 과 같은 추가 소프트웨어를 설치하고 싶지 않습니다 .purge_queue
rabbitmqctl
rabbitmqadmin
rabbitmqctl purge_queue
여기서 수동으로 작업했습니다. -p <virtual-host>
delete_queue
하고 purge_queue
사용할 수 있습니다 rabbitmqctl
난 그냥 성공적으로 실행했습니다. 아마도 당신은 구버전 일 것입니다.
대기열이 사용되지 않아서 삭제하지 않으려는 경우 대기열을 삭제하려는 경우, 정책을 통해 대기열 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
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을 가진 사람들보다 드문 경우 일 것입니다.
즐겨!
다음은 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)
}
아래와 같이 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
액세스 할 수없는 경우 에 적합합니다.
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 /에서만 작동합니다
대기열을 나열하려면
./rabbitmqadmin -f tsv -q list queues
대기열을 삭제하려면
./rabbitmqadmin delete queue name=name_of_queue
이 명령은 모든 대기열을 삭제합니다
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{}
하여 다음 명령을 실행하고 명령을 {}
바꿉니다.
http://yourhost:15672/cli/
다운로드해야합니다.
지속 불가능한 큐 를 삭제하기 위해 rabbitmq 서버를 재설정 할 필요는 없습니다 . 서버를 중지하고 다시 시작하면 사용 가능한 모든 비 지속적 큐 가 제거 됩니다.
rabbitmqadmin 설치에 문제가있는 사용자는 먼저 python을 설치해야합니다.
UNIX와 같은 운영 체제 사용자는 rabbitmqadmin을 PATH의 디렉토리 (예 : / usr / local / bin)에 복사해야합니다.
Windows 사용자는 Python이 해당 경로에 있는지 확인하고 rabbitmqadmin을 python.exe rabbitmqadmin으로 호출해야합니다.
그때
http://{hostname}:15672/cli/rabbitmqadmin
다운로드 하여 찾아보십시오 .대기열을 나열하려면
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'
스크립트와 전체 재설정없이 모든 대기열과 교환을 제거하는 방법이 있습니다. 관리자 인터페이스에서 가상 호스트를 삭제하고 다시 만들 수 있습니다. 이것은 vhost에서도 작동 /
합니다.
복원해야 할 유일한 것은 새로 생성 된 가상 호스트에 대한 권한입니다.
좋아,이 대답에 대한 중요한 한정자 : 질문은 rabbitmqctl 또는 rabbitmqadmin 을 사용 하여이 문제를 해결 하도록 요청 합니다. 제 대답은 두 가지를 모두 사용해야했습니다. 또한 MacOS 10.12.6 및 Homebrew와 rabbitmq를 설치할 때 설치 되고 rabbitmq 3.7.0 으로 식별되는 rabbitmqctl 및 rabbitmqadmin 버전에서 테스트되었습니다.brew list --versions
rabbitmqctl list_queues -p <VIRTUAL_HOSTNAME> name | sed 1,2d | xargs -I qname rabbitmqadmin --vhost <VIRTUAL_HOSTNAME> delete queue name=qname
다른 옵션은 대기열과 관련된 가상 호스트를 삭제하는 것입니다. 이렇게하면 가상 호스트와 관련된 모든 내용 이 삭제 되므로주의해야하지만 쉽고 빠릅니다.
참고 : RabbitMQ 팀 은 rabbitmq-users
메일 링리스트를 모니터링 하고 때때로 StackOverflow에 대한 질문에만 답변합니다.
rabbitmqadmin list queues|awk 'NR>3{print $4}'|head -n-1|xargs -I qname rabbitmqadmin delete queue name=qname
rabbitmqctl list_queues name messages messages_ready \ messages_unacknowledged