【问题标题】:Is there a way of pushing messages to rabbitmq with celery without having the task defined on the code有没有办法用芹菜将消息推送到rabbitmq,而无需在代码上定义任务
【发布时间】:2015-11-04 12:56:49
【问题描述】:

我需要分离我的应用程序堆栈以将 web 和 worker 作为单独的微服务,即它们都在不同的基础架构中运行并且都有不同的存储库。

得到的阻碍是如何将消息添加到队列中,即 task.add.delay(a,b) 这意味着任务添加应该在 web 中,我可以轻松地替换使用 pika 将消息推送到 rabbitmqp 的方式python 包,但随后我将失去其他功能,例如链,即链 = add(a,b) |发送结果();链()

有没有办法用芹菜将消息推送到rabbitmq,而无需在代码上定义任务

【问题讨论】:

    标签: django rabbitmq celery


    【解决方案1】:

    您可以使用send_taskhttp://docs.celeryproject.org/en/latest/reference/celery.html#celery.Celery.send_task

    这将允许您执行 app.send_task('tasks.add', args=[1,2]) 之类的操作

    如果你需要链接任务,你应该使用签名(http://docs.celeryproject.org/en/latest/reference/celery.html#celery.signature):

    from celery import signature, chain
    
    sig1 = signature('tasks.add', args=[1,2])
    sig2 = signature('tasks.add', args=[4,9])
    result = chain(sig1, sig2)()
    

    【讨论】:

    • 假设我想调用链​​中的任务,例如。 chain = task.add(a,b) | task.send_result(); chain() 我怎么用 send_task 方法做到这一点
    猜你喜欢
    • 2019-04-07
    • 1970-01-01
    • 2018-05-04
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 2012-11-24
    • 2021-04-16
    相关资源
    最近更新 更多