我使用芹菜+ RabbitMQ的。我无法找到方便的方式来清除芹菜+ rabbitmq中的队列。我用remove和create vhost来做。芹菜+ RabbitMQ的空队列
rabbitmqctl delete_vhost <vhostpath>
rabbitmqctl add_vhost <vhostpath>
它更喜欢清除一些芹菜队列的方法吗?
我使用芹菜+ RabbitMQ的。我无法找到方便的方式来清除芹菜+ rabbitmq中的队列。我用remove和create vhost来做。芹菜+ RabbitMQ的空队列
rabbitmqctl delete_vhost <vhostpath>
rabbitmqctl add_vhost <vhostpath>
它更喜欢清除一些芹菜队列的方法吗?
我不太清楚怎么芹菜的作品,但我怀疑你想(通过删除队列,以及芹菜重新创建他们你目前模拟this)来清除一个RabbitMQ的队列。
你可以安装的RabbitMQ的Management Plugin。它的WebUI将允许你清除所需的队列。这也应该告诉你你正在瞄准哪个队列,所以你不需要删除所有的东西。
一旦你知道哪个队列是这样,你可以通过程序将其清除。例如,使用py-amqplib,你会做这样的事情:
from amqplib import client_0_8 as amqp
conn = amqp.Connection(host="localhost:5672", userid="guest", password="guest", virtual_host="/", insist=False)
conn = conn.channel()
conn.queue_purge("the-target-queue")
有可能是一个更好的方式来做到这一点,虽然。
如果您需要删除队列中的所有物品(尤其是当列表很长)
1)保存所有项目到文件
sudo rabbitmqctl list_queues -p /yourvhost name > queues.txt
不要忘记删除第一个和最后行从 'queues.txt'
2)使用提到Python代码来完成这项工作
from amqplib import client_0_8 as amqp
conn = amqp.Connection(host="127.0.0.1:5672", userid="guest", password="guest", virtual_host="/yourvhost", insist=False)
conn = conn.channel()
queues = None
with open('queues.txt', 'r') as f:
queues = f.readlines()
for q in queues:
if q:
#print 'deleting %s' % q
conn.queue_purge(q.strip())
print 'purged %d items' % len(queues)
如果你面对这个问题,因为你使用rabbitmq作为结果后端,结果你得到了太多的队列,那么我会建议使用不同的结果后端(redis或mongodb)
这是一个众所周知的缺陷芹菜。如果你的结果是后端,它将为每个结果创建一个单独的队列。
如果你仍然要坚持AMQP作为结果的后端。它将在24小时内自行清除。但是,您可以使用CELERY_AMQP_TASK_RESULT_EXPIRES
设置将其设置为较小的值。
conn.queue_purge不会为我工作。这是一个amqplib方法吗? – Leopd
是的。查看文档和本教程:http://blogs.digitar.com/jjww/2009/01/rabbits-and-warrens/ – scvalex