我有几个使用RabbitMQ进行管理的队列。现在其中一些已经没有用处了,我该如何删除它们?不幸的是,我之前没有设置auto_delete
选项。
如果我现在设置这个选项,这些队列会自动删除吗?
有没有办法现在就删除那些队列?
如果你不关心管理数据库中的数据,例如 users
,vhosts
,messages
等,也不关心其他的 queues
,那么你可以通过命令行来 reset
,按照以下顺序运行以下命令:
警告:除了队列之外,这也将删除你在 RabbitMQ 服务器上配置的任何
users
和vhosts
并且将删除任何持久性的messages
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
根据RabbitMQ文档,reset
命令的含义为:
将RabbitMQ节点还原到其初始状态。
将节点从其所属的集群中移除,删除所有管理数据库中的数据,例如配置的用户和虚拟主机,并删除所有持久化消息。
因此,在使用时要小心。
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软件包,您可能需要先安装它们。$ 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安装程序
> easy_install pip
> pip install pika==0.9.8
$ 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
$ curl -i -u 'user:pass' -H "content-type:application/json" -XDELETE 'http://localhost:15672/api/queues/vhostname/name.portal' HTTP/1.1 204 No Content Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact) Date: Wed, 30 Jul 2014 11:23:47 GMT Content-Type: application/json Content-Length: 0
但是队列仍然存在 :( - 有什么想法吗? - Hackeron有一个名为rabbitmqadmin的工具,可以在控制台上很好地使用。
如果您通过ssh或日志登录安装了rabbit的服务器,您可以从以下位置下载它:
http://{server}:15672/cli/rabbitmqadmin
将其保存到/usr/local/bin/rabbitmqadmin中
然后你可以运行
rabbitmqadmin -u {user} -p {password} -V {vhost} delete queue name={name}
通常需要使用sudo。
如果您想避免输入用户名和密码,可以使用配置文件。
rabbitmqadmin -c /var/lib/rabbitmq/.rabbitmqadmin.conf -V {vhost} delete queue name={name}
以上假设您拥有文件 **/var/lib/rabbitmq/.rabbitmqadmin.conf** 并且具备最基本的要求。
hostname = localhost
port = 15672
username = {user}
password = {password}
编辑:根据@user299709的评论,指出在rabbit中,用户必须被标记为“管理员”。 (https://www.rabbitmq.com/management.html)
无法连接:[Errno 111]连接被拒绝
,有没有什么办法可以调试以查看发生了什么? - user299709curl -O http://localhost:15672/cli/rabbitmqadmin
chmod u+x rabbitmqadmin
./rabbitmqadmin delete queue name=myQueueName
要删除给定虚拟主机中与模式匹配的所有队列(例如,在根虚拟主机中包含“amq.gen”):
rabbitmqctl -p / list_queues | grep 'amq.gen' | cut -f1 -d$'\t' | xargs -I % ./rabbitmqadmin -V / delete queue name=%
另一种选择是启用management_plugin并在浏览器上连接它。您可以查看所有队列及其相关信息。在此界面上删除队列既可简单又方便。
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)}
});
});
}
});
};
删除 '/' vhost 中的所有队列
deleteQueues('/');
删除以“test”开头的“/”虚拟主机中的所有队列
deleteQueues('/', 'test');
删除以“foo”开头的“dev”虚拟主机中的所有队列
deleteQueues('dev', 'foo');
请自行承担使用此内容的风险!
$ sudo rabbitmq-plugins enable rabbitmq_management
如果您使用的是localhost,请前往http://localhost:15672/#/queues。默认密码是username: guest
,password: guest
。然后进入队列选项卡并删除队列。
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