2017-09-21 19 views
1

我從芹菜的文檔瞭解,當發佈任務時,你發送他們先交換,然後交換委託它的隊列。現在我想發送一個任務給特定的定製交換機,它將接收到的所有任務委託給3個不同的隊列,這些隊列在後臺有不同的用戶,執行不同的任務。如何發送任務交換,而不是在芹菜python隊列

class Tasks(object): 

    def __init__(self, config_object={}): 
     self.celery = Celery() 
     self.celery.config_from_object(config_object) 
     self.task_publisher = task_publisher 

    def publish(self, task_name, job_id=None, params={}): 

     if not job_id: 
     job_id = uuid.uuid4() 
     self.celery.send_task(task_name, [job_id, params], queue='new_queue') 

class config_object(object): 

    CELERY_IGNORE_RESULT = True 
    BROKER_PORT = 5672 
    BROKER_URL = 'amqp://guest:[email protected]' 
    CELERY_RESULT_BACKEND = 'amqp' 

tasks_service = Tasks(config_object) 
tasks_service.publish('logger.log_event', params={'a': 'b'}) 

這是怎麼了,我可以送一個任務特定的隊列,如果我不把它定義被髮送到一個默認的隊列,但我的問題是我如何定義交換髮送給?

回答

0

不知道你是否已經解決了這個問題。 我上週遇到了同樣的事情。 我對芹菜4.1,我想出了是隻定義交換名稱和routing_key

所以在您發表的方法,你會做一些這樣的解決方案:

def publish(self, task_name, job_id=None, params={}): 

     if not job_id: 
      job_id = uuid.uuid4() 
      self.celery.send_task(
       task_name, 
       [job_id, params], 
       exchange='name.of.exchange', 
       routing_key='*' 
      ) 
相關問題