2016-12-02 89 views
0

連接到默認的RabbitMQ我試圖設置Amazon SQS作爲Django應用程序中Celery的默認消息代理。芹菜工人正在啓動,但經紀人被設置爲默認RabbitMQ。下面你可以找到我的工作人員的輸出。Django +芹菜+ SQS設置。 Celery通過ampq

下面是我在項目中的一些配置。我celery.py樣子:

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

的負責經紀人的URL設置Django的芹菜設置的重要組成部分是:

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 -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的設置沒有被完全加載,或者我錯過了一些東西,否則它是Celery的bug。

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

真正的解決方案:

這是爲什麼我有問題:

所有在Django芹菜變量應該芹菜開始這樣,而不是使用BROKER_URL和BROKER_TRANSPORT_OPTIONS我不得不用CELERY_BROKER_URL和CELERY_BROKER_TRANSPORT_OPTIONS