/ / Django-zeler a RabbitMQ nevykonávajú úlohy - django, rabbitmq, zeler, frontu správ, django-zeler

Django-celer a RabbitMQ nevykonávajú úlohy - django, rabbitmq, zeler, fronta správ, django-zeler

Máme Django 1.3 s aplikáciou django-zeler 2.5.5 to je v poriadku vo výrobe už mesiac, ale zrazu jedna zo zelerových úloh sa teraz nedarí vykonať.

Sprostredkovateľ RabbitMQ a pracovníci Celery pracujú na samostatnom počítači a celeryconfig.py je nakonfigurovaný tak, aby používal túto konkrétnu inštanciu RabbitMQ ako backend.

Na aplikačnom serveri som sa pokúsil manuálne vypáliť zeler cez python manage.py shell.

Skutočná úloha sa nazýva takto:

>>> result = tasks.runCodeGeneration.delay(code_generation, None)
>>> result
<AsyncResult: 853daa7b-8be5-4a25-a1d0-1552b38a0d21>
>>> result.state
"PENDING"

Vracia AsyncResult podľa očakávania, ale jeho stav je navždy "PENDING".

Ak chcete zistiť, či sprostredkovateľ RabbitMQ dostal správu, spustil som nasledujúce:

$ rabbitmqctl list_queues name messages messages_ready messages_unacknowledged | grep 853daa
853daa7b8be54a25a1d01552b38a0d21        0       0       0

Nie som si istý, čo to znamená, RabbitMQ určiteZdá sa, že dostane nejakú požiadavku, inak by sa dalo vytvoriť frontu pre úlohu s ID: 853daa7b8be54a25a1d01552b38a0d21. Nezdá sa, že by nejaké správy obsahoval?

Skúsil som reštartovať Celery aj RabbitMQ a problém pretrváva.

Zeler sa chová takto: $ python /home/[project]/console/manage.py celeryd -B -c2 --loglevel=INFO

Všimnite si, že úlohy spojené s celerom / naplánované úlohy sa zdajú byť v poriadku.

[EDIT]: Neexistuje žiadna konfigurácia RabbitMQ, ako je zdôraznená skriptom init.d: /usr/lib/erlang/erts-5.8.5/bin/beam.smp -W w -K true -A30 -P 1048576 -- -root /usr/lib/erlang -progname erl -- -home /var/lib/rabbitmq -- -noshell -noinput -sname rabbit@hostname -boot /var/lib/rabbitmq/mnesia/rabbit@hostname-plugins-expand/rabbit -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/var/log/rabbitmq/rabbit@hostname.log"} -rabbit sasl_error_logger {file,"/var/log/rabbitmq/rabbit@hostname-sasl.log"} -os_mon start_cpu_sup true -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/lib/rabbitmq/mnesia/rabbit@hostname"

[Edit2]: Tu uvádzame zeler, ktorý používame pre pracovníkov. Rovnaká konfigurácia sa používa pre výrobcu s výnimkou, že localhost sa samozrejme zmení na krabicu, na ktorej je sprostredkovateľ RabbitMQ.

from datetime import timedelta

BROKER_HOST = "localhost"

BROKER_PORT = 5672
BROKER_USER = "console"
BROKER_PASSWORD = "console"

BROKER_VHOST = "console"
BROKER_URL = "amqp://guest:guest@localhost:5672//"

CELERY_RESULT_BACKEND = "amqp"

CELERY_IMPORTS = ("tasks", )

CELERYD_HIJACK_ROOT_LOGGER = True
CELERYD_LOG_FORMAT = "[%(asctime)s: %(levelname)s/%(processName)s/%(name)s] %(message)s"


CELERYBEAT_SCHEDULE = {
"runs-every-60-seconds": {
"task": "tasks.runMapReduceQueries",
"schedule": timedelta(seconds=60),
"args": ()
},
}

[EDIT3]: Naša infraštruktúra je nastavená ako číslo 2 nižšie: Celer pracovník / maklér a django-zeler aplikácia

odpovede:

2 pre odpoveď č. 1

Tento problém sme vyriešili.

Bola naplánovaná dlhotrvajúca úloha pre celery (~ 430 s), ktorá sa mala spúšťať každých 60 sekúnd. To zabavilo všetkých pracovníkov vo fronte.