簡體   English   中英

與django和芹菜+ rabbitmq的消費者連接錯誤?

[英]Consumer Connection error with django and celery+rabbitmq?

我正在嘗試用django和rabbit-mq建立celeryd。 到目前為止,我已經完成了以下工作:

  • 從pip安裝的芹菜
  • 通過他們的存儲庫提供的debs安裝rabbitmq
  • 通過rabbitmqctl為rabbitmq添加了用戶和vhost,以及該用戶的權限
  • 啟動了rabbitmq-server
  • 通過pip安裝django-celery
  • 設置django-celery,包括它的桌子
  • 配置settings.py中的各種內容(BROKER_HOST,BROKER_PORT,BROKER_USER,BROKER_PASSWORD,BROKER_VHOST,以及導入djecelery,調用設置功能並將其添加到安裝的APPS)。 我已經仔細檢查了所有這些值是正確的(至少,用戶,密碼和虛擬主機是正確的)。

所以現在,當我運行python manage.py celeryd -l info出現連接錯誤(見下文)。 任何人都知道為什么?

$ python manage.py celeryd -l info
/usr/local/lib/python2.7/dist-packages/djcelery/loaders.py:108: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments!
  warnings.warn("Using settings.DEBUG leads to a memory leak, never "
[2012-05-15 18:38:04,486: WARNING/MainProcess]  

 -------------- celery@ubuntu v2.5.3
---- **** -----
--- * ***  * -- [Configuration]
-- * - **** ---   . broker:      amqp://celeryuser@localhost:5672/celeryhost
- ** ----------   . loader:      djcelery.loaders.DjangoLoader
- ** ----------   . logfile:     [stderr]@INFO
- ** ----------   . concurrency: 1
- ** ----------   . events:      OFF
- *** --- * ---   . beat:        OFF
-- ******* ----
--- ***** ----- [Queues]
 --------------   . celery:      exchange:celery (direct) binding:celery


[Tasks]


[2012-05-15 18:38:04,562: INFO/PoolWorker-1] child process calling self.run()
[2012-05-15 18:38:04,565: WARNING/MainProcess] celery@ubuntu has started.
[2012-05-15 18:38:07,572: ERROR/MainProcess] Consumer: Connection Error: [Errno 104] Connection reset by peer. Trying again in 2 seconds...
^C[2012-05-15 18:38:08,434: WARNING/MainProcess] celeryd: Hitting Ctrl+C again will terminate all running tasks!
[2012-05-15 18:38:08,435: WARNING/MainProcess] celeryd: Warm shutdown (MainProcess)
[2012-05-15 18:38:09,372: INFO/PoolWorker-1] process shutting down
[2012-05-15 18:38:09,373: INFO/PoolWorker-1] process exiting with exitcode 0
[2012-05-15 18:38:09,376: INFO/MainProcess] process shutting down

您的問題出在BROKER_URL

使用額外的VHOST ,正確的配置將是:

BROKER_URL='amqp://celeryuser@localhost:5672//'
BROKER_VHOST='/celeryhost'

對我來說,以下URL結尾有效:... @ localhost:5672 / celeryvhost

我與RabbitMQ有類似的問題,問題是我的用戶沒有權限在RabbitMQ中創建消息。

嘗試使用guest用戶在RabbitMQ服務器上運行以下腳本,如果它創建了一個作業,請與您的用戶一起嘗試:

from celery import Celery

app = Celery('tasks', broker='amqp://radek:**@localhost:5672//')

@app.task
def add(x, y):
    return x + y

如果您遇到相同的錯誤,只需為您的用戶設置權限:

rabbitmqctl set_permissions -p / radek ".*" ".*" ".*"

您的rabbitmq服務器不能正常啟動和/或配置。 確認它是,然后再試一次 - 或者,更好的是,如果你只是想測試一些東西並且你是隊列不可知的,取出rabbitmq並開始使用redis。 配置起來要容易得多。

我只是從我的一個項目中剪切並粘貼了這段代碼,它運行得很好:

import djcelery
from datetime import timedelta

djcelery.setup_loader()


BROKER_BACKEND = "redis"
BROKER_HOST = "localhost"
BROKER_PORT = 6379
BROKER_VHOST = "0"

CELERYD_LOG_LEVEL  = 'DEBUG'
CELERY_RESULT_BACKEND = "redis"
CELERY_TASK_RESULT_EXPIRES = 150000
REDIS_HOST = "localhost"
REDIS_PORT = 6379
REDIS_DB = "0"
CELERYD_CONCURRENCY = 1
CELERYD_MAX_TASKS_PER_CHILD = 4

CELERY_IMPORTS = (
    "apps.app1.tasks",
    "apps.app2.tasks",
)

你的BROKER_URL在settings.py中是什么樣的?

默認情況下,RabbitMQ有一個訪客用戶,所以如果你可以連接

BROKER_URL = "amqp://guest:guest@localhost:5672//"

然后問題是您的RabbitMQs用戶,密碼或虛擬主機的設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM