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

时间:2017-06-28 10:20:48

标签: python rabbitmq celery

请告知如何在芹菜任务上分配自定义名称? 默认情况下,它获取模块名称,但我想知道以防万一 我想将一个任务发送到一个特定的队列,我怎么能实现呢?

换句话说,

鉴于相关的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 == A执行task.name=A(然后根据映射将其路由到队列A)

这可能吗?

1 个答案:

答案 0 :(得分:0)

您不能在功能主体中更改路由,因为根据定义,该任务已经在执行并且已经被路由。

我可以想到的一个显而易见的解决方案是将您的第一个任务委托给另一个(异步地进行,以便可以适当地路由它)。

@app.task(ignore_result=True)
def xxx(netelement):
    if netelement == A:
       task_A.delay()
    else:
       task_B.delay()