我从celery的文档中了解到,在发布任务时,您先将它们发送到交换机,然后将其委托给队列。现在我想将一个任务发送到特定的自定义交换,它将它收到的所有任务委托给3个不同的队列,这些队列将在后台拥有不同的消费者,执行不同的任务。
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:guest@localhost'
CELERY_RESULT_BACKEND = 'amqp'
tasks_service = Tasks(config_object)
tasks_service.publish('logger.log_event', params={'a': 'b'})
这就是我可以将任务发送到特定队列的方法,如果我不定义它被发送到默认队列的队列,但我的问题是如何定义要发送到的交换?
答案 0 :(得分:0)
不确定您是否已解决此问题。 我上周遇到了同样的事情。 我在Celery 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='*'
)