Wir haben eine Django 1.3 Anwendung mit django-sellery 2.5.5 , die seit Monaten in der Produktion läuft, aber auf einmal einer der Sellerie Aufgaben können jetzt nicht ausgeführt werden.
Der RabbitMQ-Broker und die Sellery-Mitarbeiter werden auf einem separaten Computer ausgeführt, und selleryconfig.py ist so konfiguriert, dass diese bestimmte RabbitMQ-Instanz als Back-End verwendet wird.
Auf dem Anwendungsserver habe ich versucht, die Sellerie-Aufgabe manuell über python manage.py shell
abzubrechen.
Die eigentliche Aufgabe wird wie folgt aufgerufen:
%Vor% Es gibt AsyncResult
wie erwartet zurück, aber sein Status ist für immer 'PENDING'
.
Um zu sehen, ob der RabbitMQ-Broker die Nachricht erhalten hat, habe ich Folgendes ausgeführt:
%Vor%Ich bin mir nicht sicher, was das bedeutet, RabbitMQ scheint sicherlich irgendeine Art von Anfrage zu erhalten, sonst hätte man sonst eine Warteschlange für die Aufgabe mit der ID: 853daa7b8be54a25a1d01552b38a0d21 anlegen können. Es scheint nur keine Nachrichten zu halten?
Ich habe versucht, sowohl Sellerie als auch RabbitMQ neu zu starten und das Problem besteht weiterhin.
Sellerie läuft so: $ python /home/[project]/console/manage.py celeryd -B -c2 --loglevel=INFO
Beachten Sie, dass die Selleriebeat / geplanten Aufgaben scheinbar gut laufen.
[EDIT]:
Es gibt keine RabbitMQ-Konfiguration, da sie vom Skript init.d eingebunden wird:
/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/[email protected]"} -rabbit sasl_error_logger {file,"/var/log/rabbitmq/[email protected]"} -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]: Hier ist die Selleryconfig, die wir für die Arbeiter verwenden. Die selbe Konfiguration wird für den Produzenten verwendet, außer dass natürlich localhost in die Box mit RabbitMQ-Broker geändert wird.
%Vor%[EDIT3]: Unsere Infrastruktur ist wie folgt eingerichtet:
Tags und Links django celery rabbitmq message-queue django-celery