2013-12-16 92 views
2

因此,我有兩個工人服務器(芹菜)在同一個rabbitmq服務器中使用兩個虛擬主機。我將一個變量傳遞給我的messagecenter.py文件,以指定應該使用哪個代理url來發布任務。經過一段時間的調試後,我發現一旦芹菜與代理網絡建立了連接 - 它不會與以前的虛擬主機斷開連接並連接到新的虛擬主機。我不確定芹菜的交換和裝訂是如何工作的。所以任何幫助,高度讚賞。芹菜路由任務到錯誤的工作服務器

messagecenter.py/

from celery import Celery 

MESSAGE_SETTINGS = { 
    "WORKER1": "amqp://user1:[email protected]:5672/vhost1", 
    "WORKER2": "amqp://user2:[email protected]:5672/vhost2" 
} 

class MessageCenter(object): 
    def __init__(self, config): 
     self._config = config 
     self._celery = Celery() 

    def produce_task(self, name, uuid, params): 
     self._celery.conf.update(
      BROKER_URL = self._config[name]) 
     self._celery.send_task(uuid, params) 

而且我是 'WORKER1' 或 'WORKER2' 通過必要的PARAMS發佈的任務,即沿send_task。我希望有一種方法可以將我的任務正確地路由到不同的服務器。任何幫助將不勝感激。

回答

0

找到工人服務器上的解決方案here

所以我改變了我的celeryconfig包括(有自己的一套綁定和routing_keys的每)兩個交易所。然後我將它們作爲參數傳入我的生產者(即send_task('task_name',[params],queue ='myQueue',routing_key ='myRoutingKey'))

僅供參考,這裏是我的celeryconfig其中一臺服務器如下所示:

BROKER_URL = "amqp://server_URL/cel_host" 

CELERY_APP = 'proj.tasks' 

CELERY_IMPORTS = ('proj.tasks',) 

CELERY_ROUTES = { 
     'proj.tasks.send_email': { 
      'queue': 'email_tasks', 
      'routing_key': 'email.import', 
     }, 
}