Django Celery无法连接到EC2上的远程RabbitMQ

时间:2015-05-19 09:04:34

标签: django amazon-ec2 rabbitmq celery

我在EC2上的两个实例上创建了一个rabbitmq集群。我的django应用程序使用celery进行异步任务,而异步任务又将RabbitMQ用于消息队列。

每当我用命令启动芹菜时:

python manage.py celery worker --loglevel=INFO

OR

python manage.py celeryd --loglevel=INFO  

我不断收到与远程RabbitMQ相关的错误消息:

[2015-05-19 08:58:47,307: ERROR/MainProcess] consumer: Cannot connect to amqp://myuser:**@<ip-address>:25672/myvhost/: Socket closed.
Trying again in 2.00 seconds...

我使用以下方式设置权限:

sudo rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*"

然后在两个群集节点上重新启动rabbitmq-server。但是,它没有帮助。

在日志文件中,我看到以下几个条目:

=INFO REPORT==== 19-May-2015::08:14:41 ===
accepting AMQP connection <0.1981.0> (<ip-address>:38471 -> <ip-address>:5672)

=ERROR REPORT==== 19-May-2015::08:14:44 ===
closing AMQP connection <0.1981.0> (<ip-address>:38471 -> <ip-address>:5672):
{handshake_error,opening,0,
                 {amqp_error,access_refused,
                             "access to vhost 'myvhost' refused for user 'myuser'",
                             'connection.open'}}

3 个答案:

答案 0 :(得分:1)

文件/usr/local/etc/rabbitmq/rabbitmq-env.conf包含NODE_IP_ADDRESS的条目,仅将其绑定到localhost。从配置中删除NODE_IP_ADDRESS条目会将端口绑定到所有network inferfaces

来源:https://superuser.com/questions/464311/open-port-5672-tcp-for-access-to-rabbitmq-on-mac

答案 1 :(得分:0)

原来我没有创建适当的配置文件。就我而言(Ubuntu 14.04),我不得不创建以下两个配置文件:

$ cat /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_NODE_IP_ADDRESS=<ip_of_ec2_instance>

<ip_of_ec2_instance>必须是EC2使用的内部IP。不是用于ssh到实例的公共IP。它可以使用ip a命令获得。

$ cat /etc/rabbitmq/rabbitmq.config
[
    {mnesia, [{dump_log_write_threshold, 1000}]},
    {rabbit, [{tcp_listeners, [25672]}]},
    {rabbit, [{loopback_users, []}]}
].

我认为{rabbit, [{tcp_listeners, [25672]}]},行是我失踪的最重要的配置之一。

感谢@dgil提供的初步故障排除帮助。

答案 2 :(得分:0)

问题已得到解答。但是如果其他人发现它有用,那么只要留下我面临类似问题的笔记

flask app ec2amqp as a broker on port 5672ec2 elasticcache memcached as a backend正在运行rabbitmq-server。 amqp经纪人在接收被解雇的任务时遇到了麻烦 - 所以我通过修复这样解决了这个问题

假设您已安装sudo apt-get install rabbitmq-serversudo add_user username password set_permissions username ".*" ".*" ".*" ),请添加用户并设置属性

sudo service rabbitmq-server restart

重启服务器:broker_url=amqp://username:password@localhost:5672// (Set as above) backend=cache+memcached://(ec2 cache url):11211/

在芹菜配置的烧瓶应用中

metaeditor.exe /compile:"C:\Program Files\Platform\MQL5\Scripts\myscript.mq5"

(缓存+ memcached://绊倒了我 - 没有它我一直收到导入错误(无法导入模块)

在安全组中的ec2实例上打开端口5672。

现在,如果您启动芹菜工作者,它应该选择被解雇的任务并将结果存储在您的memcached服务器上