celery:如何重命名任务并将其路由到队列

问题描述 投票:1回答:1

您能否就如何在芹菜任务上分配自定义名称提出建议?默认情况下,它获取模块名称,但我想知道如果我想将任务发送到特定队列,我怎么能实现?

换一种说法,

鉴于相关的Celery配置如下:

CELERY_QUEUES = (
    Queue('celery.A', Exchange("xxx"), routing_key='celery.A'),
    Queue('celery.B', Exchange("xxx"), routing_key='celery.B'),
)
CELERY_ROUTES = {
    'A': {'queue': 'celery.A', 'routing_key': 'celery.A'},
    'B': {'queue': 'celery.B', 'routing_key': 'celery.B'},
}

并且有一个功能:

@app.task(ignore_result=True)
def xxx(netelement):
    pass

我想要实现的是:如果netelement == Atask.name=A(然后,根据映射,将其路由到队列A)

那可能吗 ?

python rabbitmq celery
1个回答
0
投票

您无法更改函数体中的路由,因为根据定义,任务已在执行且已经路由。

我能想到的一个明显的解决方案是让你的第一个任务委托给另一个(异步,以便它可以适当地路由)。

@app.task(ignore_result=True)
def xxx(netelement):
    if netelement == A:
       task_A.delay()
    else:
       task_B.delay()
© www.soinside.com 2019 - 2024. All rights reserved.