我使用芹菜+ 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