芹菜:我误解了它的工作方式吗?

时间:2014-01-08 23:12:15

标签: celery message-queue amazon-sqs

我有一个基于EC2的REST Web服务,它通过SQS连接到一组工作者实例。我希望用Celery替换当前的设置,保留(目前)SQS作为代理。

然而,我不确定我对Celery如何运作的心理描述是非常准确的。遵循this文章中似乎隐含的模式,我的理解是我可以从我的API将消息排入SQS,然后Celery工作人员会及时处理这些消息。然而,我发现的例子(几乎没有一个涉及使用SQS作为经纪人),似乎表明Celery 本身进行排队。所以Celery就像队列,提交和处理任务的'包装器'。它既是生产者又是消费者 - 是吗?如果是这样对我来说似乎是个大问题,因为我不使用Python。工作人员自己会使用execl()来运行实际任务,但是我如何处理从API服务器首次将消息提交到队列中?这是芹菜甚至允许的东西吗?

我对此是正确的,还是我原来的理解准确无误?或者它们是否可以合法使用芹菜?

2 个答案:

答案 0 :(得分:1)

Celery用于消息的协议很好documented。您可以使用任何语言实现自定义生成器,也可以使用现有实现之一(PHP,Node.js,Ruby等)。它们列在here

此外,您可以使用web hooks来允许从任何环境调用任务。

答案 1 :(得分:0)

Re:如何概念化Celery,我认为它是一个异步编程框架(尽管可以同步使用它)。将函数标识为Celery Task使用异步操作(如.delay().apply_async())修饰函数,并返回AsyncResult以检查执行和状态。碰巧使用RabbitMQ作为默认代理来管理它的内部异步处理。默认情况下,它充当排队任务的生产者和使用者。

只要您遵守协议,您就可以针对RabbitMQ或您选择的经纪人编写自己的Celery生产商或消费者。可以找到RabbitMQ和Celery之间关系的正确视觉解释here