ฉันจะลบข้อความทั้งหมดจากคิวเดียวโดยใช้ CLI ได้อย่างไร


143

ฉันจะลบข้อความทั้งหมดจากคิวเดียวโดยใช้ cli ได้อย่างไร ฉันมีชื่อคิวและฉันต้องการทำความสะอาด

คำตอบ:


121

rabbitmqadminเป็นเครื่องมือที่สมบูรณ์แบบสำหรับสิ่งนี้

rabbitmqadmin purge queue name=name_of_the_queue_to_be_purged

5
ฉันมีปัญหาในการค้นหาเครื่องมือในการติดตั้ง rabbitmq ของฉัน ในที่สุดฉันก็ดาวน์โหลดได้จากที่นี่: hg.rabbitmq.com/rabbitmq-management/raw-file/rabbitmq_v3_3_5/…
FactualHarmony

5
หากคุณมีปลั๊กอินการจัดการติดตั้งอยู่แล้วคุณสามารถดาวน์โหลดได้จากhttp://rabbitserver:15672/cli/
morloch

141

คุณสามารถเรียกใช้คำสั่งนี้ได้โดยตรง

sudo rabbitmqctl purge_queue queue_name

15
หรือถ้าคุณมีโฮสต์เสมือนให้ทำrabbitmqctl purge_queue queue_name -p my_virt_host
goat

4
เรียกใช้ sudo rabbitmqctl -h และตรวจสอบรายการของ cammand ที่ระบุโดย rabbitmq ปัจจุบันของคุณ หากไม่มีนั่นหมายถึงเวอร์ชั่นปัจจุบันของ rabbitmq ไม่รองรับคุณสมบัตินี้
Anurag jain

สิ่งนี้ไม่ได้ผลสำหรับฉัน - ทันทีที่ผู้บริโภคของฉันเลิกคิวก็ยังคงเต็มไปด้วยงาน
Jamie Ivanov

ซึ่งอาจมีการดำเนินการอย่างใดอย่างหนึ่งใน 3.5.4 หรือ 3.6.0 บนพื้นฐานgithub.com/rabbitmq/rabbitmq-server/pull/215และrabbitmq.com/changelog.html หากคุณมีเวอร์ชั่นที่เก่ากว่า rabbitmqadmin ตามstackoverflow.com/a/18267342/272387อาจช่วยได้
Richlv

1
... และการตรวจสอบในgithub.com/rabbitmq/rabbitmq-server/releases/tag/ … คุณลักษณะนี้ปรากฏใน 3.5.4
Richlv

16

ในการล้างคิวคุณสามารถใช้คำสั่งต่อไปนี้ (ข้อมูลเพิ่มเติมใน API doc):

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

ชนิดของสิ่งที่น่ากลัววิธีนี้ทำงานได้ดี มีวิธีใดบ้างที่จะป้องกันเหตุการณ์นี้โดยไม่ได้ตั้งใจ? เช่นการกำหนดค่าสำหรับเซิร์ฟเวอร์การผลิตที่ปิดใช้งานฟังก์ชันนี้เพื่อป้องกันการสูญหายของข้อมูลโดยไม่ตั้งใจ?
อิสยาห์

ใช่การป้องกันจะเป็นการลบผู้ใช้ "แขก" โดยใช้คำสั่ง "delete_user"
Ocean Airdrop

16

RabbitMQ ใช้โปรโตคอลการจัดคิวข้อความขั้นสูง (AMQP) เพื่อให้คุณสามารถใช้เครื่องมือทั่วไปสำหรับสิ่งต่าง ๆ เช่นนี้

บน Debian / Ubuntu หรือระบบที่คล้ายกันให้ทำ:

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 มี 2 สิ่งภายใต้คิว

  1. ลบ
  2. ล้าง

ลบ - จะลบคิว

ล้างข้อมูล - สิ่งนี้จะทำให้คิวว่าง (หมายถึงลบข้อความออกจากคิว แต่ยังคงมีคิวอยู่)


1
มันอาจดูง่าย แต่นี่เป็นคำตอบที่ฉันต้องการ
Nick Pickering

8

หมายเหตุสำคัญ: สิ่งนี้จะลบผู้ใช้ทั้งหมดและกำหนดค่า

ALERT !!

ALERT !!

ฉันไม่แนะนำคำตอบนี้จนกว่าคุณจะต้องการลบข้อมูลออกจากคิวทั้งหมดรวมถึงผู้ใช้และการกำหนดค่า เพิ่งรีเซ็ต !!!

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

28
ซึ่งจะรีเซ็ตผู้ใช้ของคุณและการกำหนดค่าอื่น ๆ !
Codewithcheese

ฉันใช้สิ่งนี้เป็นส่วนหนึ่งของการทดสอบหน่วย เช่นฉันล้างทุกอย่างจากนั้นตั้งค่าทั้งหมดโดยใช้โปรแกรมผ่านstackoverflow.com/questions/4545660/…จากนั้นเติมข้อความและทำการทดสอบกล่องดำเพื่อให้แน่ใจว่าข้อความผ่าน ใช้งานได้ดีสำหรับวัตถุประสงค์นี้ :)
James Oravec

3
มันไร้เดียงสาจริงๆ ไม่สามารถยอมรับได้ว่าเป็นคำตอบสำหรับคำถามที่จริงจัง มันจะทำลายข้อมูลเซิร์ฟเวอร์ทั้งหมด
Andre Pastore

2
การ zeroing พื้นที่จัดเก็บของคุณและการติดตั้งระบบปฏิบัติการใหม่ยังช่วยกำจัดข้อมูล นี่ไม่ใช่สิ่งที่ 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
hi @prajnavantha pika มีวิธีการใดที่สามารถส่งข้อความได้อย่างชัดเจนเท่านั้น? (ไม่ลบคิว)
Jade Han

2

ฉันใช้ampq-purgeจากamqp-utilsสำเร็จแล้ว:

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>

ในการลบคิวที่ว่างเปล่า ( - หากว่างเปล่า ) หรือไม่มีผู้ใช้ ( - ไม่ได้ใช้ ) -:

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.