1

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

这是芹菜配置:

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 的虚拟主机。

当我在本地机器上工作时,一切正常。任何帮助将不胜感激。

**两个实例都在我们 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.

所以这绝对是连接问题,我不知道如何解决

4

1 回答 1

0

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

url 的第一部分 - amqp:// 用于固定的传输。它是尾随的“/”,可以被另一个虚拟主机替换。

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

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

于 2013-11-01T20:05:39.417 回答