Celery 与 Amazon SQS 和 S3 事件

w00*_*00t 4 amazon-s3 amazon-sqs celery

我想使用 Celery 来使用 Amazon 在 SQS 上提供的 S3 事件。但是,S3 消息格式Celery 期望的不匹配。

如何以最少的黑客行为使用这些消息?我应该编写自定义序列化程序吗?我应该放弃并使用 boto 或 boto3 制作自定义桥接器吗?

作为旁注,我还想将 Celery 连接到不同的代理 (RabbitMQ) 以完成其余的应用程序消息传递,如果这很重要的话。

scy*_*ale 5

您将需要创建一个服务来侦听 S3 通知,然后运行相应的 celery 任务。

您有多种选择 - S3 通知通过 SQS、SNS 或 AWS Lambda 发出。

事实上,最简单的选择可能是根本不使用 Celery,而只是编写一些代码以在 AWS Lambda 中运行。我还没有使用过这个服务(Lambda 是相对较新的),但看起来这意味着你不必运行监控服务或芹菜工人。


Ryl*_*ury 5

配置 AWS S3 事件以调用 AWS Lambda 函数。应编写该函数将S3事件消息转换为Celery消息格式,然后将Celery消息发布到SQS。Celery 将从 SQS 接收消息。

S3 事件 -> Lambda -> SQS -> Celery

  • 是的。这是一个 python 实现。https://gist.github.com/rhockenbury/74d176691a4d9e2a84f64cb314910fc6 请注意,我使用了 v1 任务消息协议,但 Kombu 会检测到这一点并将其解析为 v2。http://docs.celeryproject.org/en/latest/internals/protocol.html (2认同)

w00*_*00t 3

对于我的特定用例,事实证明,最简单的方法是创建一个桥接工作程序来轮询 SQS 并使用默认代理将任务分配给 Celery。

这并不难(尽管 boto 和 SQS 可以使用更多文档),而且 Celery 不太适合同时连接到两个不同的代理,因此感觉这是最好的方法。