【问题标题】:Django Celery - Cannot connect to amqp://guest@127.0.0.8000:5672//Django Celery - 无法连接到 amqp://guest@127.0.0.8000:5672//
【发布时间】:2013-08-10 14:12:58
【问题描述】:

我正在尝试设置 Django-Celery。我正在学习教程

http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

当我跑步时 $ python manage.py celery worker --loglevel=info

我明白了

[Tasks]


/Users/msmith/Documents/dj/venv/lib/python2.7/site-packages/djcelery/loaders.py:133:     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 '

[2013-08-08 11:15:25,368: WARNING/MainProcess] /Users/msmith/Documents/dj/venv/lib/python2.7/site-packages/djcelery/loaders.py:133: 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 '

[2013-08-08 11:15:25,369: WARNING/MainProcess] celery@sfo-mpmgr ready.
[2013-08-08 11:15:25,382: ERROR/MainProcess] consumer: Cannot connect to     amqp://guest@127.0.0.1:5672/celeryvhost: [Errno 61] Connection refused.
Trying again in 2.00 seconds...

以前有人遇到过这个问题吗?

settings.py

# Django settings for summertime project.
import djcelery
djcelery.setup_loader()

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

...

INSTALLED_APPS = {
    ...
    'djcelery',
    'celerytest'
}

wsgi.py

import djcelery
djcelery.setup_loader()

【问题讨论】:

  • celery 需要消息代理。我认为您错过了消息代理设置。你需要安装rabbitmq。安装完成后,需要制作vhost、user并设置权限。

标签: python django celery


【解决方案1】:

2022 年 1 月更新:此答案已过时。 cmets建议,请参考this link

问题是您正在尝试连接到 RabbitMQ 的本地实例。看看你settings.py中的这一行

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

如果您目前正在进行开发工作,您可以避免设置 Rabbit 及其周围的所有混乱,而只需使用带有 Django 数据库的消息队列的开发版本。

通过将之前的配置替换为:

BROKER_URL = 'django://'

...并添加此应用程序:

INSTALLED_APPS += ('kombu.transport.django', )

最后,启动worker:

./manage.py celery worker --loglevel=info

来源:http://docs.celeryproject.org/en/latest/getting-started/brokers/django.html

【讨论】:

  • 哇,教程完全忽略了这一点。
  • 链接已过期
  • 以前版本的 Celery 需要一个单独的库才能与 Django 一起工作,但从 3.1 开始不再是这种情况。现在支持开箱即用的 Django link
【解决方案2】:

当您通过 pip 安装 Celery 时,您应该选择要使用的版本,例如 redis、rabbitmq、django 等。

如文档中所述:https://pypi.org/project/celery/

捆绑包 Celery 还定义了一组包,可用于安装 Celery 和给定功能的依赖项。

您可以在您的需求中或在 pip 命令行中使用括号指定这些。可以通过逗号分隔来指定多个捆绑包。

例子:

$ pip install "celery[librabbitmq]"

$ pip install "celery[librabbitmq,redis,auth,msgpack]"

【讨论】:

    【解决方案3】:

    此错误表示 celery 后端设置不正确,因此无法连接到后端。

    如果您刚刚开始教程 celery with django 。您可以尝试以下设置。

    CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672//'
    CELERY_RESULT_BACKEND = 'db+sqlite:///results.db'
    

    【讨论】:

      【解决方案4】:

      您可以将这些行添加到您的 settings.py 中:

      CELERY_BROKER_URL = 'redis://localhost:6379'
      CELERY_RESULT_BACKEND = 'redis://localhost:6379'
      

      然后运行:

      celery -A yourProjectName worker -l info
      

      【讨论】:

      • 确保你已经安装了redis。请从这里安装它github.com/rgl/redis/downloads 然后,转到programfiles/redis/并打开命令提示符并写入redis-server next open redis client
      【解决方案5】:

      确保您在全局运行 rabbit 服务器,在我的情况下,这就是问题所在。

      【讨论】:

      • 您应该尝试解释为什么之前会出现此问题以及如何将服务器更改为全局修复它
      【解决方案6】:

      如果上述所有解决方案都不起作用,您可以尝试以下方法: turn off your network connection (wifi or wire).

      这很奇怪,但有时它对我有用!

      似乎它与本地网络设备有关,而不是 RabbitMQ 服务。

      我的录屏:https://drive.google.com/file/d/13t35Lzh3JLsCbGjRag0uiDhcYz1JuHq7/view?usp=sharing

      【讨论】:

        【解决方案7】:

        我收到此错误是因为 rabbitmq 未启动。如果您通过 brew 安装了 rabbitmq,您可以使用 brew services start rabbitmq 启动它

        【讨论】:

        • 您的回答很重要。是的,您可以跳过队列,但根据我的经验,仅在队列系统中会产生许多错误。此外,某些应用程序依赖于轮询/类似服务来锁定访问(在队列中,无编辑场景)。我相信 Rabbit 应该“正常”运行并想添加此注释,因为这是我在为应用程序设置安装文档时忘记的。谢谢。
        • 我刚刚在 Rabbit 上遇到了一个有趣的失败。显然 Elixir 是在本地自动启动的。因此,我的 Rabbit 端口不可用(对于 Django Celery)。按端口的 PID 列出所有进程,然后在我重新启动 Rabbit 后将其杀死解决了连接问题。我的修复是直截了当的,但强调了可能存在其他问题的地方。芹菜给了我“消费者:无法连接到 amqp://guest:**@127.0.0.1:5672//:超时。”本地错误。
        【解决方案8】:

        如果您在生产环境中工作,

        你必须先安装并设置一个 rabbitmq 服务器。安装步骤可以参考rabbitmq官网。

        在设置中你必须写这行:

        CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend',
        BROKER_URL = 'amqp://guest:guest@localhost:5672//'
        

        在所有 rabitmq 服务器设置完成后,你必须运行这两个命令,

        export C_FORCE_ROOT='true'
        celery -A transcoder(name of app) worker --loglevel=info
        

        【讨论】:

          猜你喜欢
          • 2020-12-30
          • 2020-06-07
          • 2019-01-10
          • 2018-10-24
          • 2023-01-10
          • 2018-10-17
          • 2019-11-09
          • 2020-03-12
          • 2023-03-14
          相关资源
          最近更新 更多