Câu trả lời:
Đầu tiên, liệt kê hàng đợi của bạn:
rabbitmqadmin list queues name
Sau đó, từ danh sách, bạn sẽ cần xóa từng cái một cách thủ công:
rabbitmqadmin delete queue name='queuename'
Do định dạng đầu ra, không xuất hiện, bạn có thể grep phản hồi từ đó list queues
. Ngoài ra, nếu bạn chỉ tìm cách xóa mọi thứ (đọc: đặt lại tất cả cài đặt , trả lại cài đặt về trạng thái mặc định), hãy sử dụng:
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'
hoặc một cái gì đó.
Với rabbitmqadmin
bạn có thể loại bỏ chúng bằng một lớp lót này:
rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
egrep
, vì vậy lệnh của tôi sẽ giống như sau:rabbitmqadmin -f tsv -q list queues name | egrep "%search word%" | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done
Thực sự siêu dễ dàng với các plugin và chính sách quản lý :
Bảng điều khiển quản lý Goto (localhost: 15672)
Tab quản trị Goto
Tab Chính sách Goto (ở bên phải)
Thêm chính sách
Điền vào các lĩnh vực
Tiết kiệm
Thử cái này:
rabbitmqadmin list queues name | awk '{print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
*** Not found: /api/queues/%2F/name
vì đầu ra là bảng ASCII với cột "tên". Tôi tinh chỉnh lệnh để được rabbitmqadmin list queues name | awk '!/--|name/ {print $2}' | xargs -I qn rabbitmqadmin delete queue name=qn
sửa nó.
rabbitmqadmin list queues name | awk {'print$2'} | egrep [^name] | xargs -I qname rabbitmqadmin delete queue name=qname
Nếu bạn chưa cài đặt rabbitmqadmin, hãy thử thanh lọc hàng đợi với rabbitmqctl:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl purge_queue
delete_queue
cũng không có . Tôi muốn thanh lọc rất nhiều hàng đợi dường như được tạo tự động và tôi không muốn cài đặt phần mềm bổ sung như ...purge_queue
rabbitmqctl
rabbitmqadmin
rabbitmqctl purge_queue
làm việc ở đây bằng tay. Tôi chỉ cần thêm -p <máy chủ ảo>
delete_queue
và purge_queue
có sẵn trong rabbitmqctl
và Tôi vừa chạy chúng thành công. Có lẽ bạn đang ở một phiên bản cũ.
Tôi đã thực hiện xóaRmusMqQs.sh, chấp nhận các đối số để tìm kiếm danh sách hàng đợi, chỉ chọn những đối số phù hợp với mẫu bạn muốn. Nếu bạn cung cấp không có đối số, nó sẽ xóa tất cả! Nó cho bạn thấy danh sách các hàng đợi sắp xóa, cho phép bạn thoát ra trước khi làm bất cứ điều gì phá hoại.
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"
Nếu bạn muốn kết hợp khác với các đối số bạn truyền vào, bạn có thể thay đổi grep trong dòng bốn. Khi xóa tất cả các hàng đợi, nó sẽ không xóa các hàng có ba khoảng trắng liên tiếp trong đó, vì tôi cho rằng sự kiện này sẽ hiếm hơn so với những người có rabbitmqctl in ra đầu ra bằng các ngôn ngữ khác nhau.
Thưởng thức!
Nếu bạn đang cố xóa hàng đợi vì chúng không được sử dụng và bạn không muốn đặt lại, một tùy chọn là đặt hàng đợi ở mức rất thấp thông qua chính sách, hãy đợi hàng đợi tự động bị xóa sau khi thông qua TTL và sau đó xóa chính sách ( https://www.rabbitmq.com/ttl.html ).
rabbitmqctl.bat set_policy delq ".*" '{"expires": 1}' --apply-to queues
Để xóa chính sách
rabbitmqctl clear_policy delq
Lưu ý rằng điều này chỉ hoạt động cho hàng đợi không sử dụng
Thông tin gốc tại đây: http://rabbitmq.1065348.n5.nabble.com/Deleting-all-queues-in-rabbitmq-td30933.html
Trong phiên bản Rabbit 3.7.10, bạn có thể chạy lệnh bên dưới với quyền root:
rabbitmqctl list_queues | awk '{ print $1 }' | xargs -L1 rabbitmqctl delete_queue
Đây là một cách để làm điều đó với PowerShell. URL có thể cần được cập nhật
$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)
}
Bạn có thể sử dụng rabbitmqctl eval như dưới đây:
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 ].'
Ở trên sẽ xóa tất cả các hàng đợi trống trong tất cả các vhost có tên bắt đầu bằng "tiền tố-". Bạn có thể chỉnh sửa các biến IfUnuse, IfEmpty và MatchRegex theo yêu cầu của bạn.
rabbitmqadmin
không thể truy cập.
Trong trường hợp bạn chỉ muốn thanh lọc các hàng đợi không trống (nhanh hơn rất nhiều):
rabbitmqctl list_queues | awk '$2!=0 { print $1 }' | sed 's/Listing//' | xargs -L1 rabbitmqctl purge_queue
Đối với tôi, phải mất 2-3 giây để thanh lọc một hàng đợi (cả trống và không trống), vì vậy lặp đi lặp lại qua 50 hàng đợi là một nỗi đau trong khi tôi chỉ cần thanh lọc 10 trong số chúng (40/50 là trống).
Tôi đã thử các lệnh rabbitmqctl và thiết lập lại nhưng chúng rất chậm.
Đây là cách nhanh nhất tôi tìm thấy (thay thế tên người dùng và mật khẩu của bạn):
#!/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/@
Lưu ý: Điều này chỉ hoạt động với vhost mặc định /
Để liệt kê hàng đợi,
./rabbitmqadmin -f tsv -q list queues
Để xóa một hàng đợi,
./rabbitmqadmin delete queue name=name_of_queue
Đây là phiên bản nhanh hơn (sử dụng parallel
cài đặt sudo apt-get install song song) mở rộng dựa trên câu trả lời xuất sắc của @admenva
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)
Lệnh này xóa tất cả các hàng đợi của bạn
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={}
Kịch bản này là siêu đơn giản bởi vì nó sử dụng -f bash
, nó đưa ra các hàng đợi dưới dạng một danh sách.
Sau đó, chúng tôi sử dụng xargs -n1
để chia nó thành nhiều biến
Sau đó, chúng tôi sử dụng xargs -I{}
sẽ chạy lệnh sau và thay thế {}
trong lệnh.
http://yourhost:15672/cli/
và tải xuống.
Bạn không cần thiết lập lại máy chủ rabbitmq để xóa hàng đợi không bền . Chỉ cần dừng máy chủ và bắt đầu lại và nó sẽ xóa tất cả các hàng đợi không bền có sẵn.
Đối với những người có vấn đề với việc cài đặt rabbitmqadmin, trước tiên bạn nên cài đặt python.
Người dùng hệ điều hành giống như UNIX cần sao chép rabbitmqadmin vào một thư mục trong PATH, ví dụ / usr / local / bin.
Người dùng Windows sẽ cần đảm bảo Python nằm trên PATH của họ và gọi rabbitmqadmin là python.exe rabbitmqadmin.
Sau đó
http://{hostname}:15672/cli/rabbitmqadmin
để tải về.Để liệt kê hàng đợi
python rabbitmqadmin list queues
.
Để xóa hàng đợi
python rabbitmqadmin delete queue name=Name_of_queue
Để xóa tất cả hàng đợi
1- Chính sách khai báo
python rabbitmqadmin declare policy name='expire_all_policies' pattern=.* definition={\"expires\":1} apply-to=queues
2- Xóa chính sách
python rabbitmqadmin delete policy name='expire_all_policies'
Có một cách để loại bỏ tất cả các hàng đợi và trao đổi mà không có tập lệnh và thiết lập lại đầy đủ. Bạn chỉ có thể xóa và tạo lại một máy chủ ảo từ giao diện quản trị. Điều này sẽ làm việc ngay cả đối với vhost /
.
Điều duy nhất bạn sẽ cần khôi phục là quyền cho vhost mới được tạo.
Được rồi, vòng loại quan trọng cho câu trả lời này: Câu hỏi không yêu cầu sử dụng rabbitmqctl HOẶC rabbitmqadmin để giải quyết vấn đề này, câu trả lời của tôi cần sử dụng cả hai. Ngoài ra, lưu ý rằng điều này đã được thử nghiệm trên MacOS 10.12.6 và các phiên bản của rabbitmqctl và rabbitmqadmin được cài đặt khi cài đặt rabbitmq với Homebrew và được xác định brew list --versions
là rabbitmq 3.7.0
rabbitmqctl list_queues -p <VIRTUAL_HOSTNAME> name | sed 1,2d | xargs -I qname rabbitmqadmin --vhost <VIRTUAL_HOSTNAME> delete queue name=qname
Một tùy chọn khác là xóa vhost liên quan đến hàng đợi. Điều này sẽ xóa mọi thứ liên quan đến vhost, vì vậy hãy cảnh báo, nhưng nó rất dễ dàng và nhanh chóng.
LƯU Ý: đội RabbitMQ giám sát các rabbitmq-users
mailing list và chỉ thỉnh thoảng trả lời câu hỏi về StackOverflow.
Tôi đã thử các đoạn mã trên nhưng tôi không thực hiện bất kỳ phát trực tuyến nào.
sudo rabbitmqctl list_queues | awk '{print $1}' > queues.txt; for line in $(cat queues.txt); do sudo rabbitmqctl delete_queue "$line"; done
.
Tôi tạo một tệp chứa tất cả các tên hàng đợi và các vòng lặp thông qua từng dòng để xóa chúng. Đối với các vòng lặp, while read ...
đã không làm điều đó cho tôi. Nó luôn luôn dừng lại ở tên hàng đợi đầu tiên.
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