celery+rabbitmq празна опашка

Използвам целина+заекmq. Не мога да намеря удобен начин за изчистване на опашка в celery+rabbitmq. Правя го с премахване и създаване на vhost.

rabbitmqctl delete_vhost <vhostpath>
rabbitmqctl  add_vhost <vhostpath>

Предпочитан начин ли е да изчистите опашка от целина?


person Evg    schedule 03.09.2011    source източник


Отговори (3)


Не съм съвсем сигурен как работи celery, но подозирам, че искате да изчистите RabbitMQ опашка (в момента симулирате това, като изтриете опашките и накарате celery да ги създаде отново).

Можете да инсталирате добавката за управление на RabbitMQ. Неговият 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")

Вероятно обаче има по-добър начин да го направите.

person scvalex    schedule 05.09.2011
comment
conn.queue_purge не работи за мен. Това amqplib метод ли е? - person Leopd; 09.11.2011
comment
да Проверете документите и този урок: blogs.digitar.com/jjww/ 2009/01/зайци-и-уорънс - person scvalex; 09.11.2011

Ако сте изправени пред този проблем, защото сте използвали rabbitmq за бекенда на резултатите и в резултат на това сте получили твърде много опашки, тогава бих предложил да използвате различен бекенд на резултатите (redis или mongodb)

Това е един добре известен недостатък на целината. Той ще създаде отделна опашка за всеки резултат, ако amqp за бекенда на резултатите.

Ако все пак искате да се придържате към amqp като бекенд на резултатите. Ще се изчисти за 24 часа. Можете обаче да го зададете на по-малка стойност, като използвате настройката CELERY_AMQP_TASK_RESULT_EXPIRES.

person rohan    schedule 25.04.2014

Ако трябва да изтриете ВСИЧКИ елементи в опашката (особено когато списъкът е дълъг)

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)
person romanlv    schedule 05.07.2012