如何从单个队列中删除所有消息

Bic*_*ick 139 rabbitmq

如何从单个队列中删除所有消息?我有队列名称,我想清理它.

Anu*_*ain 136

你可以直接运行这个命令

sudo rabbitmqctl purge_queue queue_name
Run Code Online (Sandbox Code Playgroud)

  • 或者,如果您有虚拟主机,请执行`rabbitmqctl purge_queue queue_name -p my_virt_host` (15认同)
  • 运行sudo rabbitmqctl -h并检查当前rabbitmq列出的cammand列表.如果它不存在则表示当前版本的rabbitmq不支持此功能. (4认同)
  • 我收到“错误:无法识别命令” (2认同)

pr4*_*r4n 112

rabbitmqadmin是完美的工具

rabbitmqadmin purge queue name=name_of_the_queue_to_be_purged
Run Code Online (Sandbox Code Playgroud)

  • 我很难在我的rabbitmq安装中找到该工具.我终于从这里下载了它:http://hg.rabbitmq.com/rabbitmq-management/raw-file/rabbitmq_v3_3_5/bin/rabbitmqadmin (5认同)
  • 如果你已经安装了管理插件,你可以从`http:// rabbitserver:15672/cli /`下载它. (5认同)

ben*_*ing 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
Run Code Online (Sandbox Code Playgroud)

  • 这会删除整个队列,而不仅仅是清除它.因此队列不再存在,您必须在之后重新初始化空队列. (10认同)

小智 14

要清除队列,您可以使用以下命令(API doc中的更多信息):

curl -i -u guest:guest -XDELETE http://localhost:15672/api/queues/vhost_name/queue_name/contents
Run Code Online (Sandbox Code Playgroud)


Gur*_*sad 9

RabbitMQ有2个项目在排队

  1. 删除
  2. 清除

删除-将删除队列

清除-这将清空队列(意味着从队列中删除消息,但队列仍然存在)

  • 这看起来很简单,但这就是我需要的答案。 (3认同)

nar*_*ren 8

重要说明:这将删除所有用户和配置.

警告!!

警告!!

除非你想删除所有队列中的数据,包括用户和配置,否则我不会建议这个答案.只是重置它!

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
Run Code Online (Sandbox Code Playgroud)

  • 这也会重置您的用户和其他配置! (28认同)
  • 将存储清零并重新安装操作系统也会清除数据;这不是 OP 要求的 (3认同)
  • 真的很天真.作为一个严肃问题的答案是不可接受的.它会破坏所有服务器数据. (2认同)

pra*_*tha 6

我猜它已经晚了但是对于其他人的参考,这可以用鼠兔来完成

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)
Run Code Online (Sandbox Code Playgroud)

  • 嗨@prajnavantha,鼠兔有什么方法只能清除消息吗?(不删除队列) (2认同)

yet*_*200 6

为了仅从队列中删除消息,请使用:

sudo rabbitmqctl --node <nodename> purge_queue <queue_name>
Run Code Online (Sandbox Code Playgroud)

为了删除空队列--if-empty)或没有消费者(--if-unused)的队列,请使用:

sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-empty
Run Code Online (Sandbox Code Playgroud)

或者

sudo rabbitmqctl --node <nodename> delete_queue <queue_name> --if-unused 
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您将 RabbitMQ 与 Docker 一起使用,您的步骤应该是:

  1. 连接到容器: docker exec -it your_container_id bash
  2. rabbitmqctl purge_queue Queue-1 (其中 Queue-1 是队列名称)