芹菜和定制消费者

Jam*_*ord 6 python amqp rabbitmq celery

据我所知,Celery既是消息的制作者又是消费者.这不是我想要达到的目标.我希望Celery仅作为消费者,根据我发送给我选择的AMQP代理的消息来激活某些任务.这可能吗?

或者我需要通过在堆叠中添加胡萝卜来制作汤?

DRC*_*DRC 6

Celery代理充当消息存储并将它们发布给一个或多个订阅它们的工作者,

所以:celery将消息发送给经纪人(rabbitmq,redist,celery本身通过django db等等).这些消息是由工作人员按照代理协议检索的,这些消息会记住它们(通常它们是持久的但可能依赖于你的经纪人),并由你的工人执行.

任务结果可在执行的工作人员任务中获得,您可以配置存储这些结果的位置,您可以使用此方法检索它们.

你可以将芹菜传递参数的任务发布到你的"接收函数"(你定义的任务,文档中有一些例子,通常你不想在这里传递大的东西(比如一个查询集),但只有那些允许你的最小信息检索执行任务时所需的内容.

一个简单的例子可能是:

您注册任务

@task
def add(x,x):
    return x+y
Run Code Online (Sandbox Code Playgroud)

你从另一个模块调用:

from mytasks import add

metadata1 = 1
metadata2 = 2
myasyncresult = add.delay(1,2)
myasyncresult.get() == 3
Run Code Online (Sandbox Code Playgroud)

编辑

在你编辑之后,我看到你可能想要从芹菜等其他来源构建消息,你可以在这里看到消息格式,它们默认为尊重该格式的pickle对象,所以你将这些消息发布到rabbitmq代理的正确队列中你是正确的从你的工人那里取回它们.