我在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'}}
答案 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
ec2
与amqp as a broker on port 5672
和ec2 elasticcache memcached as a backend
正在运行rabbitmq-server
。 amqp经纪人在接收被解雇的任务时遇到了麻烦 - 所以我通过修复这样解决了这个问题
假设您已安装sudo apt-get install rabbitmq-server
(sudo 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服务器上