2016-12-02 8 views
0

Amazon SQSをDjangoアプリケーションのCeleryのデフォルトのメッセージブローカーとして設定しようとしています。 Celeryワーカーが起動していますが、ブローカはデフォルトのRabbitMQに設定されています。あなたの下に私の労働者のアウトプットを見つけることができます。Django + Celery + SQSの設定。 Celeryがampq経由でデフォルトのRabbitMQに接続します

ここに私がプロジェクトに持っているいくつかの設定があります。ブローカーのURLのセットアップを担当するDjangoのセロリの設定の本質的な部分がある

from __future__ import absolute_import 
import os 
from celery import Celery 

# set the default Django settings module for the 'celery' program. 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dance.settings') 

app = Celery('dance') 

app.config_from_object('django.conf:settings', namespace='CELERY') 
app.autodiscover_tasks() 

@app.task(bind=True) 
def debug_task(self): 
    print('Request: {0!r}'.format(self.request)) 

BROKER_URL = 'sqs://{}:{}@'.format(AWS_ACCESS_KEY_ID, quote(AWS_SECRET_ACCESS_KEY, safe='')) 
BROKER_TRANSPORT_OPTIONS = { 
    'region': 'eu-west-1', 
    'polling_interval': 3, 
    'visibility_timeout': 300, 
    'queue_name_prefix':'dev-celery-', 
} 

私は、仮想環境内のワーカーを起動しようとしています:

のように私のcelery.pyに見えます
celery -A dance worker -l info 

私は、次の受信出力:

-------------- [email protected] v4.0.0 (latentcall) 
---- **** ----- 
--- * *** * -- Linux-4.8.0-28-generic-x86_64-with-debian-stretch-sid 2016-12-02 14:20:40 
-- * - **** --- 
- ** ---------- [config] 
- ** ---------- .> app:   dance:0x7fdc592ca9e8 
- ** ---------- .> transport: amqp://guest:**@localhost:5672// 
- ** ---------- .> results:  
- *** --- * --- .> concurrency: 8 (prefork) 
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) 
--- ***** ----- 
-------------- [queues] 
       .> celery   exchange=celery(direct) key=celery 


    [tasks] 
... 
    task1 
    task2 
... 

タスクがリストされているので、Celeryが関連するDjango設定を取得して処理すると思います。設定をSQSからRedisに切り替える場合、同じ問題が発生します。

読者のチュートリアルからわかるように、作業者の出力は次のようになります。

- ** ---------- .> transport: sqs://*redacted*:**@localhost// 
- ** ---------- .> results:  djcelery.backends.database:DatabaseBackend 

また、私はdjceleryまでは古くなっています。代わりに、私はdjango_celery_resultsを使用しています。これはCeleryセットアップページで推奨されています。最後の出力は、サイドプロジェクトからの推測です。

答えて

1

私が見つけた唯一の可能な解決策は、ブローカとデータベースのバックエンドを明示的に指定することです。

Django settings.pyの設定が完全​​に読み込まれていないか、おそらく私が何かを見逃していると思われます。それ以外はセロリのバグです。

app = Celery('dance', broker='sqs://', backend='django-db') 

真の解決策:私は問題を抱えていた理由はここに

です:Djangoの中

すべてセロリ変数セロリで始まるので、代わりのBROKER_URLとBROKER_TRANSPORT_OPTIONSを使用する必要があり、私はCELERY_BROKER_URLを使用していたとCELERY_BROKER_TRANSPORT_OPTIONS

関連する問題