2017-11-09 7 views
0

RabbitMQ를 메시징 백엔드로 사용하여 "longjobs"라는 대기열에서 작업을 처리하도록 Celery 4.1 작업자를 구성했습니다.셀러리가 RabbitMQ에서 처리하지 않음

My Celery 구성 및 작업자는 Django 1.11 프로젝트를 통해 관리됩니다.

아무 것도 오류를 발생시키지 않지만 Django 응용 프로그램에서 시작된 작업은 작업자에 의해 선택되지 않습니다. ,

celery worker -A myproject -l info -n [email protected]%h -Q longjobs 

및 로그 파일 :

CELERY_IGNORE_RESULT = False 
CELERY_TRACK_STARTED = True 
CELERY_IMPORTS = (
    'myproject.myapp.tasks', 
) 
CELERY_RESULT_BACKEND = 'amqp' 
CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml'] 
CELERY_TASK_SERIALIZER = 'pickle' 
CELERY_RESULT_SERIALIZER = 'pickle' 
CELERY_RESULT_PERSISTENT = True 
CELERY_ALWAYS_EAGER = False 
CELERY_ROUTES = { 
    'mytask': {'queue': 'longjobs'}, 
} 
CELERY_WORKER_PREFETCH_MULTIPLIER = CELERYD_PREFETCH_MULTIPLIER = 1 
CELERY_SEND_TASK_ERROR_EMAILS = True 
CELERY_ACKS_LATE = True 
CELERY_TASK_RESULT_EXPIRES = 360000 

을 그리고 난 내 근로자를 시작 :

from __future__ import absolute_import 
import os 
import sys 

from celery import Celery 
from celery._state import _set_current_app 
import django 

app = Celery('myproject') 
app.config_from_object('django.conf:settings', namespace='CELERY') 
_set_current_app(app) 

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.settings') 
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../myproject'))) 
django.setup() 
from django.conf import settings 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 

내 장고 셀러리 설정은 다음과 같습니다

celery.py 파일처럼 보인다 알겠습니다 :

[2017-11-09 16:51:03,218: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672/myproject 
[2017-11-09 16:51:03,655: INFO/MainProcess] mingle: searching for neighbors 
[2017-11-09 16:51:05,441: INFO/MainProcess] mingle: all alone 
[2017-11-09 16:51:06,162: INFO/MainProcess] [email protected] ready. 

작업자가 올바른 가상 호스트와 큐 이름으로 RabbitMQ에 성공적으로 연결하고 있음을 나타냅니다.

나는 꽃과 RabbitMQ 관리 인터페이스를 사용하여 디버깅합니다. 꽃은 내 작업자가 실행 중임을 확인하지만 아무 작업도받지 않는다고 말합니다.

RabbitMQ 관리자는 약간 낯선 사람입니다. 그것은 "longjob"대기열이 "myproject"가상 호스트에 존재하며 어떤 작업도받지 못했지만 이름에 대해 UUID가있는 대기열이 많으며 "준비"작업이 다양합니다 대기 중. 이들 중 하나에는 200 개 이상의 작업이 있습니다.

셀러리 작업자가 RabbitMQ에서 작업을 올바르게 가져 오지 않는 이유는 무엇입니까? 로그 파일에 오류가 표시되지 않습니다. 어떻게 진단 할 수 있습니까?

+0

이 어디 작업인가? 어떻게 전화하나요? –

+0

os.environ.setdefault ('DJANGO_SETTINGS_MODULE', 'myproject.settings') – Ykh

답변

0

죄송합니다. 아직 말씀 드릴 수는 없지만 구타 절차는 어디에 있습니까? 프로덕션에는 권장되지 않는 --beat 옵션을 사용하여 작업자를 실행할 수도 있고 별도로 비트 프로세스를 실행할 수도 있습니다.

celery beat -A myproject -l info [--detach] 
0

봅니다 CELERY_ROUTES (버전 4.x에서) CELERY_TASK_ROUTES에 변경합니다.

아니면 차라리 라우터를 변경합니다

CELERY_ROUTES = { 
    'mytask': {'queue': 'longjobs'}, 
} 

에 :

CELERY_ROUTES = { 
    'mytask': { 
     'exchange': 'longjobs', 
     'exchange_type': 'longjobs', 
     'routing_key': 'longjobs' 
    } 
} 
관련 문제