首页 文章

芹菜和定制消费者

提问于
浏览
6

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

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

3 回答

  • 6

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

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

    任务结果可在执行的工作人员任务中获得,您可以配置store those results的位置,您可以使用this method检索它们 .

    您可以将celery传递参数的任务发布到"receiver function"(您定义的任务,文档有一些examples,通常您不想在这里传递大量内容(比如查询集),但只有最小的信息可以让您检索到什么执行任务时需要 .

    一个简单的例子可能是:

    您注册任务

    @task
    def add(x,x):
        return x+y
    

    你从另一个模块调用:

    from mytasks import add
    
    metadata1 = 1
    metadata2 = 2
    myasyncresult = add.delay(1,2)
    myasyncresult.get() == 3
    

    EDIT

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

  • 1

    芹菜使用message broker architectural pattern . Celery可以使用许多实现/代理传输,包括RabbitMQDjango database .

    来自Wikipedia

    消息代理是用于消息验证,消息转换和消息路由的架构模式 . 它调解应用程序之间的通信,最大限度地减少应用程序之间应该具有的相互意识,以便能够交换消息,有效地实现解耦 .

    保持结果是可选的,需要结果后端 . 您可以使用不同的代理和结果后端 . Celery Getting Started指南包含更多信息 .

    您的问题的答案是 yes 您可以触发传递参数的特定任务,而无需添加Carrot .

  • 1

    Celery Custom Consumer将是3.1v发布的功能,现在正在开发中,你可以阅读http://docs.celeryproject.org/en/master/userguide/extending.html .

相关问题