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 redis celery 和 celery beats 的正确设置