Cloudflare R2 存储允许开发者在不产生典型云存储服务相关高昂出口带宽费用的情况下存储大量非结构化数据。对象存储中数据的生命周期通常不止于上传、修改或删除数据。可能还需要对数据进行转换、分析或后处理。R2 提供事件通知来管理这些事件驱动的工作流。
本文档介绍如何使用我们内置的无服务器 Cloudflare Workers 或外部服务监控数据变更通知并进行适当处理。
事件通知通过在数据发生变更时向队列发送消息来实现。这些消息随后由消费者 Worker 处理。消费者 Worker 是指订阅或消费队列消息的客户端。消费者 Worker 将自动接收这些消息,允许您定义后续需要采取的任何操作。
例如,您可以配置在新图像上传到 R2 存储桶时触发通知。该通知随后可以自动启动一个 AI 工作负载,对图像执行某种操作,例如将图像转换为文本。
请参考以下基于推送的后处理示例:当用户向 R2 上传新对象时,我们希望将该事件记录并存储到单独的 R2 存储桶中。您可以按照以下教程自行创建此场景:使用事件通知在 R2 中记录和存储上传事件。
- 用户直接向 R2 上传新对象。
- 事件通知被发送到队列。
- 消费者 Worker 从队列接收新工作(推送方式)。
- Worker 将日志事件插入 R2。
或者,您可以建立基于拉取的消费者,通过 HTTP 从 Cloudflare 外部的任何环境拉取队列消息。当您需要从现有基础设施(Cloudflare 外部)消费消息,且需要精细控制消息消费速率时,请使用基于拉取的消费者。
基于拉取的消费者必须在准备好时才显式发起调用,从队列中拉取(然后确认)消息。
请参考以下场景:用户从 R2 发起删除操作。外部服务需要得知此次删除,因此为外部服务建立了基于拉取的队列以检索通知。
- 用户从 R2 发起删除操作。
- 事件通知被发送到队列。
- 外部服务在准备好处理请求时,向队列发起 HTTP POST 请求以拉取消息。
- 队列响应步骤 3 的 POST 请求并发送消息。
- 外部服务必须确认已收到消息。
您可以按照此处的步骤配置基于拉取的消费者。
- 每当从 R2 删除对象时,向管理员发送电子邮件。
- 当视频或播客上传到 R2 时,使用 Cloudflare 的自动语音识别 (ASR) AI 模型自动处理内容以生成字幕,甚至翻译内容。
- 当 R2 中的对象被删除时,删除相关的数据库条目。