Làm cách nào để xóa tất cả các tin nhắn khỏi một hàng đợi bằng CLI?


142

Làm cách nào để xóa tất cả các tin nhắn khỏi một hàng đợi bằng cách sử dụng cli? Tôi có tên hàng đợi và tôi muốn làm sạch nó.

Câu trả lời:


121

rabbitmqadmin là công cụ hoàn hảo cho việc này

rabbitmqadmin purge queue name=name_of_the_queue_to_be_purged

5
Tôi đã có một thời gian khó khăn để tìm công cụ trong cài đặt rabbitmq của tôi. Cuối cùng tôi đã tải xuống từ đây: hg.rabbitmq.com/rabbitmq-manloyment/raw-file/rabbitmq_v3_3_5/ phỏng
FactualHarmony

5
Nếu bạn đã cài đặt plugin quản lý, bạn có thể tải xuống từhttp://rabbitserver:15672/cli/
morloch 24/07/2015

140

bạn có thể trực tiếp chạy lệnh này

sudo rabbitmqctl purge_queue queue_name

15
hoặc, nếu bạn có một máy chủ ảo, hãy làmrabbitmqctl purge_queue queue_name -p my_virt_host

4
chạy sudo rabbitmqctl -h và kiểm tra danh sách các camgers được liệt kê bởi rabbitmq hiện tại của bạn. nếu không có thì có nghĩa là phiên bản hiện tại của rabbitmq không hỗ trợ tính năng này.
Anurag

Điều này không hiệu quả với tôi - ngay khi người tiêu dùng của tôi nổ súng, hàng đợi vẫn đầy nhiệm vụ.
Jamie Ivanov

Điều này có thể đã được thực hiện trong 3.5.4 hoặc 3.6.0, dựa trên github.com/rabbitmq/rabbitmq-server/pull/215rabbitmq.com/changelog.html . Nếu bạn có phiên bản cũ hơn, rabbitmqadmin theo stackoverflow.com/a/18267342/272387 có thể giúp ích.
Richlv

1
... và kiểm tra trong github.com/rabbitmq/rabbitmq-server/release/tag/iêu , tính năng này đã xuất hiện trong 3.5.4.
Richlv

16

Để lọc hàng đợi, bạn có thể sử dụng lệnh sau (thêm thông tin trong tài liệu API):

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

Loại đáng sợ này làm việc tốt như thế nào. Bất kỳ cách nào để bảo vệ chống lại điều này xảy ra ngoài ý muốn? Chẳng hạn như một cấu hình cho các máy chủ sản xuất vô hiệu hóa chức năng này để ngăn ngừa mất dữ liệu ngẫu nhiên?
Ê-sai

Vâng, bảo vệ sẽ là xóa "khách" của người dùng bằng cách sử dụng lệnh "xóa_user"
Ocean Airdrop

16

RabbitMQ thực hiện Giao thức xếp hàng tin nhắn nâng cao (AMQP) để bạn có thể sử dụng các công cụ chung cho những thứ như thế này.

Trên Debian / Ubuntu hoặc hệ thống tương tự, hãy:

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

Đó là một giải pháp tốt cho một số phiên bản không có rabbitmqadmin.
WisZhou

11
Điều này xóa toàn bộ hàng đợi, không chỉ thanh lọc nó. Vì vậy, hàng đợi không còn tồn tại nữa và bạn phải khởi tạo lại hàng đợi trống sau đó.
krob

13

RabbitMQ có 2 thứ đang xếp hàng

  1. Xóa bỏ
  2. Thanh lọc

Xóa - sẽ xóa hàng đợi

Lọc - Điều này sẽ làm trống hàng đợi (có nghĩa là xóa tin nhắn khỏi hàng đợi nhưng hàng đợi vẫn tồn tại)


1
Nó có vẻ đơn giản, nhưng đây là câu trả lời tôi cần.
Nicholas Pickering

8

LƯU Ý QUAN TRỌNG: Điều này sẽ xóa tất cả người dùng và cấu hình.

C !! NG !!

C !! NG !!

Tôi không đề xuất câu trả lời này cho đến khi bạn muốn xóa dữ liệu khỏi tất cả các hàng đợi, bao gồm cả người dùng và cấu hình. Chỉ cần thiết lập lại nó !!!

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

28
Điều đó cũng đặt lại người dùng của bạn và các cấu hình khác!
Mật mã

Tôi đã sử dụng điều này như là một phần của bài kiểm tra đơn vị. ví dụ: tôi xóa tất cả mọi thứ, sau đó thiết lập tất cả theo chương trình thông qua stackoverflow.com/questions/4545660/, sau đó điền một số tin nhắn và thực hiện kiểm tra hộp đen để đảm bảo các tin nhắn đã đi qua. Hoạt động tuyệt vời cho mục đích này. :)
James Oravec

3
Nó thực sự ngây thơ. Nó không được chấp nhận như là một câu trả lời cho một câu hỏi nghiêm túc. Nó sẽ phá hủy tất cả dữ liệu máy chủ.
Andre Pastore

2
không lưu trữ bộ nhớ của bạn và cài đặt lại hệ điều hành cũng được loại bỏ dữ liệu; đây không phải là những gì OP đang yêu cầu
istepaniuk

5

Tôi đoán là muộn nhưng để người khác tham khảo, điều này có thể được thực hiện với 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
hi @prajnavantha là pika có phương pháp nào rõ thông điệp không? (không xóa hàng đợi)
Jade Han

2

Tôi đã sử dụng thành công ampq-purgetừ amqp-utils để làm điều này:

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

Để chỉ xóa các tin nhắn khỏi hàng đợi, hãy sử dụng:

sudo rabbitmqctl --node <nodename> purge_queue <queue_name>

Để xóa hàng đợi trống ( --if-trống ) hoặc không có người tiêu dùng ( - nếu không sử dụng ), hãy sử dụng:

sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-empty

hoặc là

sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-unused 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.