使用 RabbitMQ 的 Amazon Elastic Beanstalk 上的芹菜超时异常

Posted

技术标签:

【中文标题】使用 RabbitMQ 的 Amazon Elastic Beanstalk 上的芹菜超时异常【英文标题】:Celery timeout exception on Amazon Elastic Beanstalk using RabbitMQ 【发布时间】:2014-03-22 04:04:55 【问题描述】:

我正在尝试在我的 Beanstalk 环境中使用 Celery(这是完成我项目的技术堆栈的最后一部分:P)。 这是我到目前为止所做的:

由于 RabbitMQ 是 Celery 的最佳代理,而 Amazon 不提供专门的服务,我创建了一个基于 Ubuntu 13 64bit 的自定义 AMI 已安装 RabbitMQ 删除了默认用户guest/guest 创建了一个自定义用户 创建了自定义虚拟主机 已安装管理插件 使用 http API 测试了我的配置,以确认我的 RabbitMQ 服务器已启动并正在运行。

到目前为止一切顺利!然后在我的 beanstalk .config 文件中,我为 celery 添加了几个命令:

04_celery_periodic_tasks:
    command: "celery worker --app=com.cygora --loglevel=info --beat --autoreload -n period_tasks_worker.%h"
    leader_only: true
05_celery_standard_worker:
    command: "celery worker --app=com.cygora --loglevel=info --autoreload -n worker_1.%h"

一旦我部署了我的应用程序,我就没有发现任何与 celery 相关的错误(所以我假设一切正常,从“Python/Django 方面”开始)...但是一旦我使用了我的网站需要通过 Celery 向 Rabbit 发送消息,但出现超时异常:

[Thu Feb 20 22:01:24 2014] [error]    File "/opt/python/run/venv/lib/python2.7/site-packages/kombu/transport/pyamqp.py", line 111, in establish_connection
[Thu Feb 20 22:01:24 2014] [error]      conn = self.Connection(**opts)
[Thu Feb 20 22:01:24 2014] [error]    File "/opt/python/run/venv/lib/python2.7/site-packages/amqp/connection.py", line 165, in __init__
[Thu Feb 20 22:01:24 2014] [error]    self.transport = create_transport(host, connect_timeout, ssl)
[Thu Feb 20 22:01:24 2014] [error]   File "/opt/python/run/venv/lib/python2.7/site-packages/amqp/transport.py", line 274, in create_transport
[Thu Feb 20 22:01:24 2014] [error]   return TCPTransport(host, connect_timeout)
[Thu Feb 20 22:01:24 2014] [error]  File "/opt/python/run/venv/lib/python2.7/site-packages/amqp/transport.py", line 89, in __init__
[Thu Feb 20 22:01:24 2014] [error]  raise socket.error(last_err)
[Thu Feb 20 22:01:24 2014] [error]  error: timed out

我在设置中将代理 url 指定为:

BROKER_URL = "amqp://myuser:mypassword@myelasticip:5672/myvirtualhost"

我错过了什么或我做错了什么?为什么无法建立socket连接?

【问题讨论】:

【参考方案1】:

我忘了我问过这个问题……反正我解决了。只需为 RabbitMQ 打开正确的 TCP 端口即可:

22

15672

5672

我还改变了运行 celery 的方式,通过使用 supervisor + django-supervisor 来正确地守护它:)

【讨论】:

您能否分享您将 celery 作为守护进程运行的解决方案?我很好奇你是怎么设置的。正如我在以下答案中所述,我想出了一个解决方案,并有兴趣与您所做的进行比较***.com/questions/14761468/… 我也很好奇,我想和你讨论一下……能给我你的电子邮件吗? (我是:davidezanotti (at) gmail.com) 同上,也想了解有关在 EB 中守护 celery 的详细信息。

以上是关于使用 RabbitMQ 的 Amazon Elastic Beanstalk 上的芹菜超时异常的主要内容,如果未能解决你的问题,请参考以下文章

使用 Amazon MQ 的 OroCommerce

Amazon Elastic Beanstalk 工作器层

运行 AWS Deep Learning Base AMI (Amazon Linux 2) 时,如何在 Elastic Beanstalk 中设置 WSGI?

使用 NodeJS 将 RabbitMQ 导入 AWS Redshift

Amazon SQS 消息多路传送

基于Opencv的几种立体匹配算法+ELAS