Python 芹菜和定制消费者

Python 芹菜和定制消费者,python,rabbitmq,celery,amqp,Python,Rabbitmq,Celery,Amqp,据我所知,芹菜是信息的生产者和消费者。这不是我想要实现的。我希望芹菜只充当消费者,根据我发送给我选择的AMQP代理的消息触发某些任务。这可能吗 或者我需要通过在我的书堆中添加胡萝卜来制作汤吗?芹菜经纪人充当信息商店,并将其发布给订阅这些信息的一个或多个员工 因此:芹菜将消息推送到代理(rabbitmq、redist、芹菜本身通过django db等)。这些消息由工作人员按照代理协议检索,并由工作人员记忆(通常是持久的,但可能取决于您的代理),然后由您的工作人员执行 任务结果在正在执行的辅助任务上

据我所知,芹菜是信息的生产者和消费者。这不是我想要实现的。我希望芹菜只充当消费者,根据我发送给我选择的AMQP代理的消息触发某些任务。这可能吗


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

芹菜经纪人充当信息商店,并将其发布给订阅这些信息的一个或多个员工

因此:芹菜将消息推送到代理(rabbitmq、redist、芹菜本身通过django db等)。这些消息由工作人员按照代理协议检索,并由工作人员记忆(通常是持久的,但可能取决于您的代理),然后由您的工作人员执行

任务结果在正在执行的辅助任务上可用,您可以配置到何处,也可以使用来检索它们

您可以发布带有芹菜的任务,并将参数传递给“接收者函数”(您定义的任务,文档中有一些,通常您不想在这里传递大的东西(比如queryset),但只有允许您在执行任务时检索所需信息的最小信息

一个简单的例子是:

您注册了一个任务

@task
def add(x,x):
    return x+y
您可以通过以下方式从另一个模块调用:

from mytasks import add

metadata1 = 1
metadata2 = 2
myasyncresult = add.delay(1,2)
myasyncresult.get() == 3
编辑

在编辑之后,我发现您可能希望从芹菜以外的其他来源构造消息,您可以看到消息格式,它们默认为遵循该格式的pickle对象,因此您可以将这些消息发布到rabbitmq代理的正确队列中,您可以从工作人员处检索它们。

芹菜使用许多实现/代理传输可以与芹菜一起使用,包括和

发件人:

消息代理是一种用于消息验证、消息转换和消息路由的体系结构模式。它调解应用程序之间的通信,最大限度地减少应用程序之间的相互感知,以便能够交换消息,有效地实现解耦

保留结果是可选的,需要一个结果后端。您可以使用不同的代理和结果后端。本指南包含更多信息


你的问题的答案是:你可以启动特定的任务,传递参数而不添加到混合中。

芹菜自定义消费者将是3.1v中发布的一项功能,现在正在开发中,你可以阅读它。

汤和胡萝卜?你能举个例子吗?当然,但我可以通过排队来启动芹菜工人吗从另一个应用程序中删除?换句话说:芹菜可以订阅代理并根据退出队列的消息启动某些任务吗?如果您关心水平扩展,是的,这肯定是可行的!您只需要将状态作为数据库推送到共享后端(例如检索您的模型?)或者只对传递的数据进行操作。感谢您的编辑。由于芹菜“自动”将通过订阅队列来处理它们,因此消息格式与我所寻找的非常相似?是的,了解队列名称似乎很有希望。因此,我可以让一个外部应用程序在不同的环境中运行,将消息排入RabbitMQ队列,这是一个成功的消息西芹告诉西芹调用任务X?如果其他环境使用Python,那么它很简单,并包含在基本文档和示例中。如果您使用另一种语言,您可以查看。是的。但问题是我不想使用Webhook。据我所知,西芹是t的消费者和生产者他向我发送消息。我只想将芹菜用作消费者,并让一个外部制作人对芹菜的任务进行排队。我不知道直接将格式正确的芹菜消息放入任务队列(不使用芹菜库)有多容易。您可以直接将AMQP与一个框架一起使用,例如和您的制作人语言中的等效框架。不过,您将负责消息的路由/订阅。