2013-11-01 23 views
1

我編寫了一個異步電子郵件服務,它使用Celery和RabbitMQ作爲我們的Flask應用程序。所以我在一臺服務器上運行rabbitmq - 我創建了一個用戶vhost並設置了權限。我爲端口5672創建了一個入站TCP規則。它的出站規則對所有人開放。我在另一個ec2實例上有芹菜應用程序。這個安全性也非常相似。在我設立芹菜/ supervisord之前 - 我嘗試啓動芹菜工作者。不幸的是,它給了我錯誤。芹菜工(在遠程ec2上)無法與rabbitmq通信(在另一個ec2上)

這是芹菜配置:

celery = Celery('myapp.celery', 
      broker = 'amqp://user:[email protected]: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://來賓:來賓@兔子:5672 // SSL = 1 - 我得到的錯誤

consumer: Cannot connect to amqp://[email protected]:5672//: [Errno -2] Name or service not known. 

所以它絕對連接問題,我不知道如何解決

+1

我似乎你缺少一個'/'。 Url應該是'amqp:// cel_host' – Lycha

+0

第二個'/'是rabbitmq的默認虛擬主機。所以如果我使用不同的虛擬主機,我不需要第二個'/' – user2216194

回答

0

終於發現了問題所在 - 這是我的一個愚蠢的錯誤。 broker_url設置正常,但後端設置不是。

url - amqp://的第一部分是用於固定的傳輸。它是可以被另一個虛擬主機取代的尾隨'/'。

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

所以從某種意義上說,你是對的!