Django Celery 无法连接到 EC2 上的远程 RabbitMQ
Django Celery cannot connect to remote RabbitMQ on EC2
我在 EC2 上的两个实例上创建了一个 rabbitmq 集群。我的 django 应用程序使用 celery 进行异步任务,而异步任务又使用 RabbitMQ 进行消息队列。
每当我用命令启动芹菜时:
python manage.py celery worker --loglevel=INFO
或
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'}}
文件 /usr/local/etc/rabbitmq/rabbitmq-env.conf
包含 NODE_IP_ADDRESS
的条目,仅将其绑定到本地主机。从配置中删除 NODE_IP_ADDRESS
条目会将端口绑定到所有 network inferfaces.
来源:https://superuser.com/questions/464311/open-port-5672-tcp-for-access-to-rabbitmq-on-mac
原来我没有创建合适的配置文件。就我而言 (Ubuntu 14.04),我必须创建以下两个配置文件:
$ cat /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_NODE_IP_ADDRESS=<ip_of_ec2_instance>
<ip_of_ec2_instance>
必须是 EC2 使用的内部 IP。不是用于 ssh 进入实例的 public 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 提供的初步故障排除帮助。
问题已得到解答。但是如果其他人发现它有用的话,我只是留下了我遇到的类似问题的笔记
我在 ec2
上有 flask app
运行,amqp as a broker on port 5672
和 ec2 elasticcache memcached as a backend
。 amqp 代理在获取被解雇的任务时遇到问题 - 所以我通过这样修复解决了它
假设您已安装 rabbitmq-server
(sudo apt-get install rabbitmq-server
),请添加用户并设置属性
sudo add_user username password
set_permissions username ".*" ".*" ".*"
重启服务器:sudo service rabbitmq-server restart
在你的 celery 配置的烧瓶应用程序中
broker_url=amqp://username:password@localhost:5672// (Set as above)
backend=cache+memcached://(ec2 cache url):11211/
(cache+memcached:// 把我绊倒了 - 没有它我一直收到导入错误(无法导入模块)
在安全组中开放你的ec2实例的5672端口
现在,如果你启动你的 celery worker,它应该选择被触发的任务并将结果存储在你的 memcached 服务器上
我在 EC2 上的两个实例上创建了一个 rabbitmq 集群。我的 django 应用程序使用 celery 进行异步任务,而异步任务又使用 RabbitMQ 进行消息队列。
每当我用命令启动芹菜时:
python manage.py celery worker --loglevel=INFO
或
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'}}
文件 /usr/local/etc/rabbitmq/rabbitmq-env.conf
包含 NODE_IP_ADDRESS
的条目,仅将其绑定到本地主机。从配置中删除 NODE_IP_ADDRESS
条目会将端口绑定到所有 network inferfaces.
来源:https://superuser.com/questions/464311/open-port-5672-tcp-for-access-to-rabbitmq-on-mac
原来我没有创建合适的配置文件。就我而言 (Ubuntu 14.04),我必须创建以下两个配置文件:
$ cat /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_NODE_IP_ADDRESS=<ip_of_ec2_instance>
<ip_of_ec2_instance>
必须是 EC2 使用的内部 IP。不是用于 ssh 进入实例的 public 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 提供的初步故障排除帮助。
问题已得到解答。但是如果其他人发现它有用的话,我只是留下了我遇到的类似问题的笔记
我在 ec2
上有 flask app
运行,amqp as a broker on port 5672
和 ec2 elasticcache memcached as a backend
。 amqp 代理在获取被解雇的任务时遇到问题 - 所以我通过这样修复解决了它
假设您已安装 rabbitmq-server
(sudo apt-get install rabbitmq-server
),请添加用户并设置属性
sudo add_user username password
set_permissions username ".*" ".*" ".*"
重启服务器:sudo service rabbitmq-server restart
在你的 celery 配置的烧瓶应用程序中
broker_url=amqp://username:password@localhost:5672// (Set as above)
backend=cache+memcached://(ec2 cache url):11211/
(cache+memcached:// 把我绊倒了 - 没有它我一直收到导入错误(无法导入模块)
在安全组中开放你的ec2实例的5672端口
现在,如果你启动你的 celery worker,它应该选择被触发的任务并将结果存储在你的 memcached 服务器上