芹菜工人(在远程ec2上)无法与rabbitmq通信(在另一个ec2上)

时间:2013-11-01 14:19:08

标签: python amazon-ec2 rabbitmq celery

我写了一个异步电子邮件服务,它将Celery和RabbitMQ用于我们的Flask应用程序。所以我在一台服务器上运行了rabbitmq - 我创建了一个用户,vhost并设置了权限。我为端口5672创建了入站TCP规则。它的出站规则对所有人开放。我在另一个ec2实例上有芹菜应用程序。这个的安全性也非常相似。在我建立celeryd / supervisord之前 - 我试图启动芹菜工人。不幸的是,它给了我错误。

这是芹菜配置:

celery = Celery('myapp.celery', 
            broker = 'amqp://user:password@rabbit:5672/cel_host',
            backend = 'amqp:/cel_host',
            include = 'myapp.tasks')

这是相关的追溯:

File "/usr/local/lib/python2.7/dist-packages/celery/backends/__init__.py", line 56, in get_backend_by_url
return get_backend_cls(backend, loader), url
File "/usr/local/lib/python2.7/dist-packages/celery/utils/functional.py", line 133, in _M
value = fun(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/celery/backends/__init__.py", line 45, in get_backend_cls
return symbol_by_name(backend, aliases)
File "/usr/local/lib/python2.7/dist-packages/kombu/utils/__init__.py", line 84, in symbol_by_name
return getattr(module, cls_name) if cls_name else module
AttributeError
:
'module' object has no attribute '/cel_host'

* cel_host是RabbitMQ的vhost。

当我在本地计算机上工作时,一切正常。任何帮助将受到高度赞赏。

**两个实例都在我们的VPC中的私有子网上

修改 当我将broker_url更改为amqp:// guest:guest @ rabbit:5672 //?ssl = 1 - 我收到错误

consumer: Cannot connect to amqp://guest@rabbit:5672//: [Errno -2] Name or service not known.

所以这肯定是连接问题,我不知道如何修复

1 个答案:

答案 0 :(得分:0)

终于找到了问题所在 - 这对我来说是一个愚蠢的错误。 broker_url设置很好,但后端设置不是。

url的第一部分 - amqp://用于修复的传输。它是尾随的'/',可以被另一个vhost替换。

broker = 'amqp://<my_app:password>@<hostname>:5672/<vhost>',
            backend = 'amqp://<vhost>'

从某种意义上说,Lycha你是对的!