2017-11-09 4 views
0

メッセージングバックエンドとしてRabbitMQを使用して、「longjobs」というキューからタスクを処理するようにCelery 4.1ワーカーを設定しました。RabbitMQからセロリを処理しない

My Celeryの設定と作業者は、Django 1.11プロジェクトによって管理されます。

何もエラーは発生しませんが、私のDjangoアプリケーションから起動されたタスクは私のワーカーによって決して拾われません。

マイcelery.pyファイルは次のようになります。私のDjangoのセロリの設定がある

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_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 

そして、私は私の労働者を起動します、

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

とそのログファイルに私は参照してください:

[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に正常に接続していることを示しています。

私はFlowerとRabbitMQ管理インターフェースを使ってデバッグしています。花は私の労働者が走っていることを確認しますが、決して何の仕事も受けていないと言います。

RabbitMQ管理者はちょっと見知らぬ人です。それは私の "myproject"仮想ホストのための "longjob"キューが存在し、それもタスクを受けていないが、名前のためのUUIDを持つキューがたくさんあり、保留中。これらのうちの1つに200以上のタスクがあります。

なぜ私のCeleryワーカーがRabbitMQからタスクを正しく引き出していないのですか?どのログファイルにもエラーは表示されません。これをどのように診断するのですか?

+0

は?あなたはどのように電話しますか? –

+0

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

答えて

0

申し訳ありませんが、まだコメントできませんが、ビートのプロセスはどこですか?プロダクション用に推奨されていない--beatオプションを使用してワーカーを実行することも、ビートプロセスを個別に実行することもできます。

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

(バージョン4.xに)CELERY_TASK_ROUTESCELERY_ROUTESを変更するようにしてください。

それとも、私はむしろあなたのルーターを変更:

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

へ:

CELERY_ROUTES = { 
    'mytask': { 
     'exchange': 'longjobs', 
     'exchange_type': 'longjobs', 
     'routing_key': 'longjobs' 
    } 
} 
あなたのタスクです
関連する問題