Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django和芹菜消费者连接错误+;兔子?_Python_Django_Rabbitmq_Celery_Django Celery - Fatal编程技术网

Python django和芹菜消费者连接错误+;兔子?

Python django和芹菜消费者连接错误+;兔子?,python,django,rabbitmq,celery,django-celery,Python,Django,Rabbitmq,Celery,Django Celery,我想和django和rabbit mq一起建立celeryd。到目前为止,我已经做了以下工作: 从pip安装芹菜 通过存储库中的DEB安装rabbitmq 通过rabbitmqctl向rabbitmq添加了用户和vhost,以及该用户的权限 启动rabbitmq服务器 通过pip安装django芹菜 准备好django芹菜,包括它的桌子 在settings.py中配置了各种内容(BROKER_主机、BROKER_端口、BROKER_用户、BROKER_密码、BROKER_VHOST,以及导入d

我想和django和rabbit mq一起建立celeryd。到目前为止,我已经做了以下工作:

  • 从pip安装芹菜
  • 通过存储库中的DEB安装rabbitmq
  • 通过rabbitmqctl向rabbitmq添加了用户和vhost,以及该用户的权限
  • 启动rabbitmq服务器
  • 通过pip安装django芹菜
  • 准备好django芹菜,包括它的桌子
  • 在settings.py中配置了各种内容(BROKER_主机、BROKER_端口、BROKER_用户、BROKER_密码、BROKER_VHOST,以及导入djecellery、调用安装函数并将其添加到已安装的应用程序)。我仔细检查了一下,所有这些值都是正确的(至少,user、password和vhost是正确的)
因此,现在,当我运行
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

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

你的代理URL在settings.py中是什么样子的

默认情况下,RabbitMQ有一个来宾用户,因此如果您可以与

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

然后问题是RabbitMQs用户、密码或虚拟主机的设置。

您的问题出现在
代理URL

使用附加的
VHOST
,正确的配置为:

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

对我来说,以下URL结尾有效:
…@localhost:5672/celeryvhost

我对RabbitMQ也有类似的问题,问题是我的用户没有在RabbitMQ中创建消息的权限

请尝试使用来宾用户在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 ".*" ".*" ".*"
如果出现相同错误,只需为用户设置权限:

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 ".*" ".*" ".*"

BROKER\u VHOST
设置已弃用。您可以在
BROKER\u URL
变量中设置
VHOST
:amqp://celeryuser@localhost:5672/celeryhost'对于我来说,代理url在vhost:broker\u url='1'前面只使用了一个双斜杠amqp://celeryuser@localhost:5672//celeryhost'我遇到了同样的问题