我写了一个异步电子邮件服务,它将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.
所以这肯定是连接问题,我不知道如何修复
答案 0 :(得分:0)
终于找到了问题所在 - 这对我来说是一个愚蠢的错误。 broker_url设置很好,但后端设置不是。
url的第一部分 - amqp://用于修复的传输。它是尾随的'/',可以被另一个vhost替换。
broker = 'amqp://<my_app:password>@<hostname>:5672/<vhost>',
backend = 'amqp://<vhost>'
从某种意义上说,Lycha你是对的!