【问题标题】:Celery: am I misunderstanding how it's meant to work?Celery:我是否误解了它的工作原理?
【发布时间】:2014-01-27 07:34:49
【问题描述】:

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

不过,我不确定我对 Celery 运作方式的心理印象是否准确。按照this 文章中似乎暗示的模式,我的理解是我可以从我的 API 将消息排队到 SQS,然后这些消息将由 Celery 工作人员及时处理。然而,我发现的示例(几乎没有一个涉及使用 SQS 作为代理)似乎表明 Celery 本身 进行了排队。所以 Celery 就像队列、提交和处理任务的“包装器”。它同时充当生产者消费者——对吗?如果是这样,那对我来说似乎是个大问题,因为我不使用 Python。工作人员自己会使用 execl() 来运行实际任务,但我将如何处理从 API 服务器将消息初始提交到队列中?这是 Celery 允许的吗?

我是对的,还是我最初的理解是准确的?或者它们是同样合法的 Celery 使用方式?

【问题讨论】:

  • This 文章指出,可以使用不同的自定义消费者(工作者)或生产者(客户端)代替 Celery。

标签: celery message-queue amazon-sqs


【解决方案1】:

Celery 用于消息的协议很好documented。您可以使用任何语言实现自定义生产者或使用现有实现之一(PHP、Node.js、Ruby 等)。他们列出了here

您也可以使用web hooks,它允许从任何环境调用任务。

【讨论】:

  • 谢谢。确实,我正在考虑使用网络挂钩。但这不是把事情弄错了——不是 Celery 通过对 URL 的请求调用网络钩子吗?
【解决方案2】:

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

只要您遵守协议,您就可以针对 RabbitMQ 或您选择的代理编写自己的 Celery 生产者或消费者。可以在here 找到对 RabbitMQ 和 Celery 之间关系的直观解释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 2015-11-01
    • 1970-01-01
    • 2016-02-20
    • 2012-12-11
    • 2011-02-18
    • 2018-02-17
    相关资源
    最近更新 更多