我有一个基于EC2的REST Web服务,它通过SQS连接到一组工作者实例。我希望用Celery替换当前的设置,保留(目前)SQS作为代理。
然而,我不确定我对Celery如何运作的心理描述是非常准确的。遵循this文章中似乎隐含的模式,我的理解是我可以从我的API将消息排入SQS,然后Celery工作人员会及时处理这些消息。然而,我发现的例子(几乎没有一个涉及使用SQS作为经纪人),似乎表明Celery 本身进行排队。所以Celery就像队列,提交和处理任务的'包装器'。它既是生产者又是消费者 - 是吗?如果是这样对我来说似乎是个大问题,因为我不使用Python。工作人员自己会使用execl()来运行实际任务,但是我如何处理从API服务器首次将消息提交到队列中?这是芹菜甚至允许的东西吗?
我对此是正确的,还是我原来的理解准确无误?或者它们是否可以合法使用芹菜?
答案 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。