Django/Celery 和 CloudAMQP/Heroku 的连接错误

Posted

技术标签:

【中文标题】Django/Celery 和 CloudAMQP/Heroku 的连接错误【英文标题】:Connection Error with Django/Celery and CloudAMQP/Heroku 【发布时间】:2012-07-09 02:56:22 【问题描述】:

我有一个已经部署到 Heroku 的 Django 应用程序。这个应用程序使用 Celery 进行消息队列,我已经使用 RabbitMQ 在本地运行它,没有发生任何事故。

不幸的是,当我将这个婴儿部署到 Heroku 时,我发现 RabbitMQ 插件不可用,我必须使用 CloudAMQP。 CloudAMQP 和 Heroku 的文档让我相信我可以使用 Celery(即使他们推荐 Pika),但是当我尝试部署时,我的调度程序和工作进程都会遇到严重的连接错误。以下是确切的错误:

2012-07-09T16:46:22+00:00 app[scheduler.1]: [2012-07-09 11:46:22,234: ERROR/Beat] Celerybeat: Connection error: [Errno 111] Connection refused. Trying again in 2.0 seconds...
2012-07-09T16:46:23+00:00 app[worker.1]: [2012-07-09 11:46:23,852: ERROR/MainProcess] Consumer: Connection Error: [Errno 111] Connection refused. Trying again in 2 seconds...

我应该注意到我的 Heroku 配置变量确实有一个 CLOUDAMQP_URL,所以这应该不是问题吗?

如果有人将 CloudAMQP 与 Django/Heroku 一起使用,我将不胜感激,可以给我一些关于如何确保 Celery 可以与代理连接的指导。

【问题讨论】:

你有多少工作的测功机? 【参考方案1】:

您可能超出了免费计划的 3 个并发连接限制。将BROKER_POOL_LIMIT 设置为 1,它应该会更好地工作。

【讨论】:

一旦超过连接限制,有没有简单的方法将连接重置为 0?重置我的测功机似乎不起作用。 @theStreaker123 我使用heroku restart myworker -a myapp 它会重新启动我的工人。 @Jeff 这已经晚了两年,但你需要make sure you have heartbeats setup 然后强制终止不包含心跳的连接。您还可以通过将 ?heartbeat=30 附加到您的 CAMQP 代理 URL 来设置 CloudAMQP 心跳,但据我所知,它没有记录。【参考方案2】:

确保您在 settings.py 文件的顶部有此内容。

import djcelery
djcelery.setup_loader()

【讨论】:

欢迎来到 ***。感谢您发布答案。

以上是关于Django/Celery 和 CloudAMQP/Heroku 的连接错误的主要内容,如果未能解决你的问题,请参考以下文章

Django 和 Celery 的示例:周期性任务

django redis celery 和 celery beats 的正确设置

django —— Celery实现异步和定时任务

django+celery配置(定时任务)

django+celery+rabbitmq 编码错误和 sig-kill

Django celery 和 celery-beat 守护进程脚本错误