您断言存在队列(如果不存在则创建它),方法是使用 的 queue.declare 强> 。如果您最初将auto-delete设置为false,则使用autodelete true再次调用queue.declare将导致软错误,并且代理将关闭该通道。
你需要使用 的 queue.delete 强> 现在为了删除它。
有关详细信息,请参阅API文档:
如果您使用其他客户端,则需要找到等效方法。由于它是协议的一部分,它应该存在,它可能是Channel或等效的一部分。
您可能还想查看其余文档,特别是 入门 涵盖了很多常见用例的部分。
最后,如果您有问题但在其他地方找不到答案,您应该尝试发帖 RabbitMQ讨论 邮件列表。开发人员尽力回答那里提出的所有问题。
我已经将Piotr Stapp的JavaScript / jQuery方法进一步推广,将其封装到一个函数中并进行了一些推广。
此函数使用RabbitMQ HTTP API查询给定的可用队列 vhost ,然后根据可选项删除它们 queuePrefix :
vhost
queuePrefix
function deleteQueues(vhost, queuePrefix) { if (vhost === '/') vhost = '%2F'; // html encode forward slashes $.ajax({ url: '/api/queues/'+vhost, success: function(result) { $.each(result, function(i, queue) { if (queuePrefix && !queue.name.startsWith(queuePrefix)) return true; $.ajax({ url: '/api/queues/'+vhost+'/'+queue.name, type: 'DELETE', success: function(result) { console.log('deleted '+ queue.name)} }); }); } }); };
在RabbitMQ管理页面上将此功能粘贴到浏览器的JavaScript控制台中后,您可以像这样使用它:
删除'/'vhost中的所有队列
deleteQueues('/');
删除以'test'开头的'/'vhost中的所有队列
deleteQueues('/', 'test');
删除'dev'vhost中以'foo'开头的所有队列
deleteQueues('dev', 'foo');
的 请使用此风险,风险自负! 强>
import pika connection = pika.BlockingConnection(pika.ConnectionParameters( 'localhost')) channel = connection.channel() channel.queue_delete(queue='queue-name') connection.close()
安装pika包如下
$ sudo pip install pika==0.9.8
安装依赖于pip和git-core软件包,您可能需要先安装它们。
在Ubuntu上:
$ sudo apt-get install python-pip git-core
关于Debian:
$ sudo apt-get install python-setuptools git-core $ sudo easy_install pip
在Windows上:要安装easy_install,请运行用于setuptools的MS Windows Installer
> easy_install pip > pip install pika==0.9.8
我做了不同的方式,因为我只能访问管理网页。我创建了简单的“片段”,用于删除Javascript中的队列。这里是:
function zeroPad(num, places) { var zero = places - num.toString().length + 1; return Array(+(zero > 0 && zero)).join("0") + num; } var queuePrefix = "PREFIX" for(var i=0; i<255; i++){ var queueid = zeroPad(i, 4); $.ajax({url: '/api/queues/vhost/'+queuePrefix+queueid, type: 'DELETE', success: function(result) {console.log('deleted '+queuePrefix+queueid)}}); }
我的所有队列都是格式:PREFIX_0001到PREFIX_0XXX
在RabbitMQ版本中&gt; 3.0,如果启用了rabbitmq_management插件,您还可以使用HTTP API。只需确保将content-type设置为'application / json'并提供vhost和队列名称:
I.E.使用curl和vhost'test'以及队列名称'testqueue':
$ curl -i -u guest:guest -H "content-type:application/json" -XDELETE http://localhost:15672/api/queues/test/testqueue HTTP/1.1 204 No Content Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) Date: Tue, 16 Apr 2013 10:37:48 GMT Content-Type: application/json Content-Length: 0
安装
$ sudo rabbitmq-plugins enable rabbitmq_management
然后去 HTTP://本地主机:15672 /#/队列 如果您使用的是localhost。默认密码是 username: guest , password: guest 并转到队列选项卡并删除队列。
username: guest
password: guest
如果您不关心其他队列,可以通过命令行按顺序运行以下命令来删除所有队列:
的 警告: 强> 这也将 的 删除 强> 任何 的 用户 强> 和 的 虚拟主机 强> 你已经在兔子服务器上配置了
rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app
rabbitmq文档说明了 reset 命令:
reset
从其所属的任何群集中删除该节点,从中删除所有数据 管理数据库,例如配置的用户和虚拟主机,以及 删除所有持久性消息。
所以,小心使用它。
另一种选择是启用management_plugin并通过浏览器连接到它。您可以查看所有队列和有关它们的信息。从此界面删除队列是可能的,也很简单。
管理插件(Web界面)为您提供了python脚本的链接。您可以使用它来删除队列。我使用这种模式删除了很多队列:
python tmp/rabbitmqadmin --vhost=... --username=... --password=... list queues > tmp/q vi tmp/q # remove all queues which you want to keep cut -d' ' -f4 tmp/q| while read q; do python tmp/rabbitmqadmin --vhost=... --username=... --password=... delete queue name=$q; done